我有一个事件处理方案,它也应该最终写入文件;当文件被刷新时,我不能延迟事件,即等待BufferedWriter.write(String)结束。推迟BufferedWriter.write到另一个线程
我在寻找实现这一最简单的方法(就是有一个图书馆这样做?我想,我不是唯一一个谁都有这个问题)
我有一个事件处理方案,它也应该最终写入文件;当文件被刷新时,我不能延迟事件,即等待BufferedWriter.write(String)结束。推迟BufferedWriter.write到另一个线程
我在寻找实现这一最简单的方法(就是有一个图书馆这样做?我想,我不是唯一一个谁都有这个问题)
基本上,你想要的文字到文件不会中断您的事件处理流程。
在这种情况下,您只需将文件处理委派给单独的线程即可。
你的代码应该是这个样子:
// 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
你可以做一个排队的系统,你把队列/列表上的事件,然后有另一个线程这需要写入的事件,并写出来。这样,文件编写器将与系统的其余部分异步,并且您唯一的延迟就是将元素添加到列表中。
您可以使用单线程执行程序为每个事件执行文件写入。
ExecutorService executor = Executors.newSingleThreadExecutor();
// for each event
executor.submit(new Runnable() {
public void run()
{
// write to the file here
}
});
只有一个线程和执行程序会照顾排队。
只要保持相同的线程,就可以使用java.io.PipedOutputStream
来存储数据,并将单独的线程副本从匹配的PipedInputStream
文件中分离出来。
我有很多活动即将到来 - 有时甚至超过每秒25万。我不认为为每个事件创建一个线程将是有效的。 – Dani 2009-05-06 08:56:13