将BufferedWriter.write推迟到另一个线程

时间:2009-05-06 08:24:06

标签: java multithreading file bufferedwriter

我有一个事件处理方案,最终也应该写入文件;在刷新文件时,即等待BufferedWriter.write(String)结束时,我无法延迟事件。

我正在寻找实现这一目标的最简单方法(是否有图书馆这样做?我认为我不是唯一一个遇到此问题的人)

4 个答案:

答案 0 :(得分:5)

您可以使用单线程执行程序为每个事件执行文件写入。

ExecutorService executor = Executors.newSingleThreadExecutor();

// for each event
executor.submit(new Runnable() {
  public void run()
  {
     // write to the file here
  }
});

只有一个线程,执行者会处理排队。

答案 1 :(得分:2)

基本上,您希望写入文件不会中断事件处理流程。

在这种情况下,您需要做的就是将文件处理委托给一个单独的线程。

您的代码应如下所示:

// 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

答案 2 :(得分:1)

只要保持相同的线程,就可以使用java.io.PipedOutputStream来存储数据,并从匹配的PipedInputStream到文件中使用单独的线程副本。

答案 3 :(得分:0)

您可以创建一个基于队列的系统,将事件放在队列/列表中,然后使用另一个线程来写入事件并将其写出来。这样文件编写器将与系统的其余部分异步,并且您唯一的延迟就是将一个元素添加到列表中。