多线程只写一个输出流和数据丢失

multi thread write only one outputstream and data loss

我运行生成随机字符串数据的五个线程,然后只写一个输出流。程序完成后,丢失了一些数据。

我简化了我的代码。

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点之间。我认为如果我使用索引数据结构来检查消耗了哪些数据,就可以解决。但是有没有更好的方法来解决这个问题呢?请帮我。谢谢

尝试将 ConcurrentLinkedQueue<String> 用于 buffer,使用方法 offerpoll 而不是对字符串引用的 +== ""