java – Thread.join()等效于执行器
发布时间:2020-12-14 05:23:40 所属栏目:Java 来源:网络整理
导读:我有一个新手的问??题.我有这个代码: 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 I
我有一个新手的问??题.我有这个代码:
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()将不会返回. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |