複数のスレッドから送信されたタスクを実行するために使用される1つのスレッドを持つスレッドプールがあります。このタスクは実際には2つの部分から構成されます。つまり、意味のある結果を持つとかなり時間がかかりますが意味のある結果は返さないcleanup
です。現時点(明らかに間違っている)の実装は、このように見えます。以前のcleanup
タスクの後にのみ別のperform
タスクが実行されるようにするエレガントな方法はありますか?あなたがjava8を使用している場合2つのタスクを連続して実行する
public class Main {
private static class Worker {
int perform() {
return 1;
}
void cleanup() {
}
}
private static void perform() throws InterruptedException, ExecutionException {
ExecutorService pool = Executors.newFixedThreadPool(1);
Worker w = new Worker();
Future f = pool.submit(() -> w.perform());
pool.submit(w::cleanup);
int x = (int) f.get();
System.out.println(x);
}
}
正しい方法で提出する必要はありませんか?たとえば、実行、クリーンアップ、実行、クリーンアップ。 –
なぜ 'pool.submit() - > {w.cleanup(); return w.perform();});' –
@СӏаџԁеМаятіиそれは 'perform()'を不必要に遅らせるかもしれません。クリーンアップ()には1分かかり、perform()には1秒かかり、2分ごとにタスクを提出するとします。 – biziclop