3

最終的にファイルに書き込む必要があるイベント処理スキームがあります。ファイルがフラッシュされているとき、つまり BufferedWriter.write(String) の最後まで待機しているときに、イベントを遅らせる余裕はありません。

それを達成する最も簡単な方法を探しています(それを行うライブラリはありますか?この問題を抱えていたのは私だけではないと思います)

4

4 に答える 4

5

シングル スレッド エグゼキューターを使用して、各イベントのファイル書き込みを実行できます。

ExecutorService executor = Executors.newSingleThreadExecutor();

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

スレッドは 1 つだけで、executor がキューイングを処理します。

于 2009-05-06T09:39:49.147 に答える
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
于 2009-05-06T08:29:48.877 に答える
1

同じスレッドを保持している限り、データを保存するために使用でき、一致するファイルjava.io.PipedOutputStreamとは別のスレッドをコピーできます。PipedInputStream

于 2009-05-06T10:00:41.280 に答える
0

イベントをキュー/リストに配置してから、イベントを書き込み、それらを書き出す別のスレッドを持つキューベースのシステムを作成できます。このようにして、ファイルライターはシステムの残りの部分に対して非同期になり、唯一の遅延はリストに要素を追加することになります.

于 2009-05-06T08:30:40.653 に答える