java – Thread.join()等效于执行器

前端之家收集整理的这篇文章主要介绍了java – Thread.join()等效于执行器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个新手的问​​题.我有这个代码
public class Main 
{

    public static void main(String[] args) throws InterruptedException 
    {
        // TODO Auto-generated method stub
        IntHolder aHolder=new IntHolder();
        aHolder.Number=0;

        IncrementorThread A= new IncrementorThread(1,aHolder);
        IncrementorThread B= new IncrementorThread(2,aHolder);
        IncrementorThread C= new IncrementorThread(3,aHolder);

        A.start();
        B.start();
        C.start();

        A.join();
        B.join();
        C.join();
        System.out.println("All threads completed...");

    }

}

这将等待所有线程完成.如果我这样使用Executors:

public class Main 
{

    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        IntHolder aHolder=new IntHolder();
        aHolder.number=0;

        IncrementalRunable A= new IncrementalRunable(1,aHolder);
        IncrementalRunable B= new IncrementalRunable(2,aHolder);
        IncrementalRunable C= new IncrementalRunable(3,aHolder);

        ExecutorService exec = Executors.newFixedThreadPool(3);
        exec.execute(A);
        exec.execute(B);
        exec.execute(C);
        //Don't know what to do here

        System.out.println("All threads completed...");
    }
}

如何暂停主线程等待执行器中的所有线程完成,即所有线程完成工作后都应该打印“所有线程完成…”?

解决方法

executor.shutdown();
while (!executor.awaitTermination(24L,TimeUnit.HOURS)) {
    System.out.println("Not yet. Still waiting for termination");
}

使用shutdown()awaitTermination()组合.

编辑:

基于@Lital的评论

List<Callable<Object>> calls = new ArrayList<Callable<Object>>();
calls.add(Executors.callable(new IncrementalRunable(1,aHolder)));
calls.add(Executors.callable(new IncrementalRunable(2,aHolder)));
calls.add(Executors.callable(new IncrementalRunable(3,aHolder)));

List<Future<Object>> futures = executor.invokeAll(calls);

注意:所有的任务完成(通过失败或完成成功执行),invokeAll()将不会返回.

猜你在找的Java相关文章