我有一個事件處理方案,它也應該最終寫入文件;當文件被刷新時,我不能延遲事件,即等待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