スレッドプール経由で実行したいランナブルがたくさんあります。ただし、各ランナブルは結果をファイルに書き込みます。したがって、現在、ランナブルのインターフェースは単純です。
class MyRunnable implements Runnable {
...
MyRunnable(BufferedWriter writer, Task t) {
this.writer = writer;
this.task = t;
}
public void run() {
...
this.writer.write(SOME_DATA);
}
}
ただし、1 つの BufferedWriter (つまり、1 つの出力ファイル) を Executor プール内の各スレッドに関連付けたいと考えています。ただし、次のように.execute
関数を呼び出しています。ExecutorService
BufferedWriter[] writers = initialize to 20 BufferedWriters;
ExecutorService executor = Executors.newFixedThreadPool(20);
for (Task t : tasks) {
MyRunnable runnable = new MyRunnable(WHAT SHOULD GO HERE?, t)
executor.execute(runnable);
}
エグゼキューターが特定のタスクを実行するためにどのスレッドを割り当てるかわからないため、どの BufferedWriter をランナブルに提供する必要があるかわかりません。ExecutorService によって管理される各スレッドが 1 つのオブジェクト (この場合は BufferedWriter) に関連付けられていることを確認するにはどうすればよいですか?