1. 程式人生 > >如何判斷開啟的多個執行緒都執行結束了?

如何判斷開啟的多個執行緒都執行結束了?

class TaskTest { private Logger log = LoggerFactory.getLogger(getClass().getSimpleName()); private ExecutorService threadPool = Executors.newScheduledThreadPool(8); private CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool); private
AtomicInteger atomicInteger = new AtomicInteger(); private Random random = new Random(); @org.springframework.scheduling.annotation.Scheduled(cron = "0/3 * * * * ?") public void test(){ long startTime = System.currentTimeMillis(); int num = atomicInteger.getAndIncrement()
; log.info("任務開始 {} taskNum = {}", Thread.currentThread() , num); int length = 10; for(int i = 0 ; i < length; i++){ TestCallable testCallable = new TestCallable(i); completionService.submit(testCallable); } log.debug("----測試中----"); for
(int i = 0 ; i < length; i++){ try { int resultNum = completionService.take().get(); log.debug("執行緒返回結果:{}", resultNum); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } long costTime = System.currentTimeMillis() - startTime; log.info("任務結束{} taskNum = {}, costTime = {}", Thread.currentThread(), num, costTime); } class TestCallable implements Callable<Integer>{ private int i; TestCallable(int i){ this.i = i; } @Override public Integer call() { int randomNumber = (random.nextInt(10)+1); try { log.debug("執行緒{}睡眠{}秒,i = {}",Thread.currentThread(),randomNumber, i); Thread.sleep(randomNumber*1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return i; } } }