私はマルチスレッドアプリケーションでJavaエグゼキューを使用しましたが、私は、次の方法のそれぞれに使用するのが最善であるとき見つけ出すように見えることはできません。Java Executorを正しく使用するには?
1.
ExecutorService executor=Executors.newFixedThreadPool(50);
executor.execute(new A_Runner(... some parameter ...));
executor.shutdown();
while (!executor.isTerminated()) { Thread.sleep(100); }
2は、 [2]私は何をスキップした場合における具体。
int Page_Count=200;
ExecutorService executor=Executors.newFixedThreadPool(50);
doneSignal=new CountDownLatch(Page_Count);
for (int i=0;i<Page_Count;i++) executor.execute(new A_Runner(doneSignal, ... some parameter ...));
doneSignal.await();
executor.shutdown();
while (!executor.isTerminated()) { Thread.sleep(100); }
int Executor_Count=30;
ThreadPoolExecutor executor=new ThreadPoolExecutor(Executor_Count,Executor_Count*2,1,TimeUnit.SECONDS,new LinkedBlockingQueue());
List<Future<String>> futures=new ArrayList<>(3330);
for (int i=0;i<50;i++) futures.add(executor.submit(new A_Runner(... some parameter ...));
executor.shutdown();
while (!executor.isTerminated()) { executor.awaitTermination(1,TimeUnit.SECONDS); }
for (Future<String> future : futures)
{
String f=future.get();
// ...
}
、 doneSignalの場合、それは[1]のようになりますので、doneSignalの使用は何ですか?
また、[3]では、doneSignalを追加するとどうなりますか?それとも可能ですか?
私が知りたいのは、これらのアプローチは互換性があるのですか、または上記の特定のタイプを使用するはずの特定の状況がありますか?