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

标签 java java-stream outputstream fileoutputstream bufferedwriter

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

我简化了我的代码。

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而不是+== ""关于字符串引用。

关于java - 多线程只写一个输出流并且数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58027985/

相关文章:

java - 如何在 Spring Boot 中使用 CommandLineRunner?

java - FileService 处理大文件时内存不足

java - 创建回显服务器 : Connected client gets IO-exception

java - FileOutputStream 中的新行

c++ - 使用输出流显示文本 "in-game"是个好主意吗?

java - 线程中的异步回调

java - 将 mysql 连接器添加到 eclipse 中的 maven/nexus 构建

java - 为什么 StreamEx 在收集到列表时强制我将 "? extends"添加到变量类型?

java - 如何从 lambda 表达式中收集列表

Java Streams - forEach with pre-Action 和 post-Action