многопотоковая запись только одного выходного потока и потеря данных - PullRequest
0 голосов
/ 20 сентября 2019

Я запускаю пять потоков, которые генерируют случайные строковые данные, а затем записывают только один выходной поток.после завершения программы некоторые данные были потеряны.

Я упрощаю свой код.

new Thread(() -> {
  stream.write(RANDOM_STRING + "\n)
).start();
class Stream {
  String buffer = "";

  Stream() {
    new Thread(() -> {
      BufferedOutputStream bs
       = new BufferedOutputStream(new FileOutputStream("PATH");
      bs.wrtie(buffer.getBytes());  // point 1
      buffer = ""                   // point 2
      bs.close();
    }).start();
  }
  public void write(String input) {
    buffer += input;
  }
}

Я думаю, что причина потери данных находится между точками 1 и 2. Я думаю, что еслиЯ использую структуру данных индексации для проверки того, какие данные были использованы, это можно решить.но есть ли лучший способ решить эту проблему?Пожалуйста, помогите мне.Спасибо.

1 Ответ

1 голос
/ 20 сентября 2019

Попробуйте использовать ConcurrentLinkedQueue<String> для buffer, с методами offer и poll вместо += и = "" для ссылки на строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...