如何知道写在runnable()中的逻辑执行完毕??
光阴似箭催人老,日月如移越少年。
ExecutorService es = Executors.newCachedThreadPool(); for(int i=0;i<5;i++) es.execute(new Runnable() { /* your task */ }); es.shutdown(); try{ //等待线程执行完毕 boolean finshed = es.awaitTermination(1, TimeUnit.MINUTES); if (finished){ //do something } }catch(InterruptedException e){ //timeout }
StackOverflow上的原答案。
boolean awaitTermination(long timeout,TimeUnit unit)throws InterruptedException Blocks until all tasks have completed execution after a shutdown request, or the timeout occurs, or the current thread is interrupted, whichever happens first.
这里有个假设是,1分钟之内,所有task都会执行完毕, 场景符合的话这种是最简单的。 如果超时时间范围内可能执行不成功,或者无法评估执行时间的场景。 使用这个类,是不是更方便一点?
java.util.concurrent.CountDownLatch
方法可能有多种,适合场景的才是最好的。 楼上贴的stackoverflow 原答案里的其他回答也有参考价值
StackOverflow上的原答案。
这里有个假设是,1分钟之内,所有task都会执行完毕, 场景符合的话这种是最简单的。
如果超时时间范围内可能执行不成功,或者无法评估执行时间的场景。
使用这个类,是不是更方便一点?
方法可能有多种,适合场景的才是最好的。
楼上贴的stackoverflow 原答案里的其他回答也有参考价值