姬長信(Redy)

如何正确使用Java Executor?


我在我的多线程应用程序中使用了Java Executors,但我似乎无法弄清楚何时最好使用以下各种方法:

1.

ExecutorService executor=Executors.newFixedThreadPool(50);
executor.execute(new A_Runner(... some parameter ...));
executor.shutdown();
while (!executor.isTerminated()) { Thread.sleep(100); }

2.

int Page_Count=200;
ExecutorService executor=Executors.newFixedThreadPool(50);
doneSignal=new CountDownLatch(Page_Count);
for (int i=0;i

3.

int Executor_Count=30;
ThreadPoolExecutor executor=new ThreadPoolExecutor(Executor_Count,Executor_Count*2,1,TimeUnit.SECONDS,new LinkedBlockingQueue());
List> futures=new ArrayList(3330);

for (int i=0;i future : futures)
{
    String f=future.get();
    // ...
}

具体来说,在[2]中,如果我跳过doneSignal,那么它就像[1],那么doneSignal的用途是什么?

另外,在[3]中,如果我添加一个doneSignal怎么办?或者有可能吗?

我想知道的是:这些方法是否可以互换,或者是否存在我应该使用上述特定类型的某种情况?