FutureTasksとCachedThreadPool作業を行う方法
-
24-09-2019 - |
質問
私は現在、次の処理を行うコードを持っています
private final static ExecutorService pool = Executors.newCachedThreadPool();
public void foo(){
FutureTask<MyObject> first_task = createFutureTask();
FutureTask<MyObject> second_task = createFutureTask();
...
pool.execute(first_task);
pool.execute(second_task);
....
first_task.get();
second_task.get();
...
System.out.println(time taken);
}
私がいる問題は、私が計算を行うとき、彼らが取る時間をプリントアウトするために、将来のタスクのそれぞれを取得するということですので、コンソール上で例えば私は
が表示されますfirst_task : 20000ms
second_task : 18000ms
...
が、合計時間(System.out.println(time taken)
)は、次いで、任意の将来のタスクで撮影された最長時間はるかに大きいので、この実施例に沿って本方法は、(first_taskの20Sと比較して)約1分かかりますか。
私は、これらの将来のタスクを並列に実行するが、それらが次々に実行されているかのようなタイミングからそれはそうという印象の下にありました。正しくこのAPIを使用していますI?
解決
あなたは正しくAPIを使用しているが、別のスレッドではなく、別のプロセス(したがって、必ずしも平行)内の各タスクを実行することに注意してください。
各スレッドは、実際には同時に実行するために別々のCPUコア上で実行する必要があります。これが可能であるかどうかは、JVMとOSがコア間のスレッドをスケジュールすることができますどのようにあなたのマシン、その現在の負荷に依存し、ます。
所属していません StackOverflow