gpt4 book ai didi

java - 多线程写入文件时使用 BufferReader 读取文件

转载 作者:行者123 更新时间:2023-11-30 09:06:21 30 4
gpt4 key购买 nike

全部,我正在尝试读取一个将由多个线程写入的文件,我将使用 BufferedReader 在一个线程中读取该文件。

代码如下所示。

FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
String detail;
while ((detail =br.readLine()) != null)
{
...
}

目前看来工作正常。但我对此有一些疑问。如果这个问题听起来很愚蠢。请不要笑我。谢谢。

循环是否可能从未被打破?因为其他线程正在写入文件。所以 readLine() 可能永远不会返回 null?

已更新

假设有 3 个线程(T1、T2、T3)。

T1 和 T2 是作家。

T3 是阅读器。

代码按以下顺序运行。

1.当前文件行数为100。

2.T1写一行到文件。(文件行增加到101)

3.T3读取文件(101)的最后一行。下一次阅读将得到 null。

4.T2 append a line to file.(file lines increased to 102)

5.T3再次读取....(是否返回null?因为T2在T3再次读取之前刚刚在文件中添加了一个新行。)

请帮助审核。在此先感谢。

最佳答案

是的,循环可能永远不会结束(至少直到内存不足)。下面是一些代码来证明这一点:

public class test {

public static void main(String[] args) {
// start thread to write to file
new Thread(new Runnable() {
@Override
public void run() {
FileWriter writer;
try {
int i = 1;
writer = new FileWriter("D:\\text.txt");
writer.append("line"+ i++ + "\n");
writer.flush();
while (true)
{
writer.append("line"+ i++ + "\n");
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
}

}
}).start();

try {
Thread.sleep(500);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

// start thread to read file
new Thread(new Runnable() {
@Override
public void run() {
try {
FileReader reader = new FileReader("D:\\text.txt");
BufferedReader br = new BufferedReader(reader);
String detail;
while ((detail =br.readLine()) != null)
{
System.out.println(detail);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}

}
}).start();

}
}

关于java - 多线程写入文件时使用 BufferReader 读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24506600/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com