【发布时间】:2009-05-06 08:24:05
【问题描述】:
我有一个事件处理方案,它最终也应该写入文件;我不能在文件被刷新时延迟事件,即等待 BufferedWriter.write(String) 结束。
我正在寻找实现这一目标的最简单方法(有图书馆这样做吗?我认为我不是唯一遇到此问题的人)
【问题讨论】:
标签: java multithreading file bufferedwriter
我有一个事件处理方案,它最终也应该写入文件;我不能在文件被刷新时延迟事件,即等待 BufferedWriter.write(String) 结束。
我正在寻找实现这一目标的最简单方法(有图书馆这样做吗?我认为我不是唯一遇到此问题的人)
【问题讨论】:
标签: java multithreading file bufferedwriter
您可以使用单线程执行器为每个事件执行文件写入。
ExecutorService executor = Executors.newSingleThreadExecutor();
// for each event
executor.submit(new Runnable() {
public void run()
{
// write to the file here
}
});
只有一个线程,执行器会负责排队。
【讨论】:
基本上,您希望写入文件不会中断您的事件处理流程。
在这种情况下,您只需将文件处理委托给单独的线程即可。
您的代码应如下所示:
// event handling starts
Runnable fileHandlingThread = new Runnable() {
public void run() {
// open the file
// write to the file
// flush the file
}
};
new Thread(fileHandlingThread).start();
// continue doing other things in the mean time
【讨论】:
只要您保持相同的线程,您就可以使用java.io.PipedOutputStream 来存储数据,并将匹配的PipedInputStream 中的单独线程复制到文件中。
【讨论】:
您可以创建一个基于队列的系统,在其中将事件放在队列/列表中,然后有另一个线程将要写入的事件写入并写出。这样,文件编写器将与系统的其余部分异步,您唯一的延迟就是将元素添加到列表中。
【讨论】: