多线程只写一个输出流和数据丢失
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
,使用方法 offer
和 poll
而不是对字符串引用的 +=
和 = ""
。
我运行生成随机字符串数据的五个线程,然后只写一个输出流。程序完成后,丢失了一些数据。
我简化了我的代码。
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
,使用方法 offer
和 poll
而不是对字符串引用的 +=
和 = ""
。