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

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


我简化了我的代码。


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


幕布斯6054654
浏览 139回答 1
1回答

桃花长相依

尝试使用ConcurrentLinkedQueue<String>for&nbsp;buffer、 with 方法offer和poll而不是+=and&nbsp;= ""on String 引用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java