1. 程式人生 > >併發程式設計遊玩---ExecutorService的isShutdown()和isTerminated(),以及一些方法的區別

併發程式設計遊玩---ExecutorService的isShutdown()和isTerminated(),以及一些方法的區別

log.info("預更新開始");

		ExecutorService executorService = PreloadExecutorServiceUtil.newExecutorService();

		for (UpdateEnum updateEnum : UpdateEnum.values()) {
			log.info("更新CMDB..." + updateEnum.getDescription() + "....");
			ListenableFutureTask task = ListenableFutureTask.create(new Callable<Object>() {
				@Override
				public Object call() throws Exception {
					updateCmdbData.incremnetUpdate(updateEnum);
					return "";
				}
			});
			executorService.submit(task);
			//log.info("更新CMDB..." + updateEnum.getDescription() + "結束");
		}

		executorService.shutdown();

		//自旋
		while (true){
			if (executorService.isTerminated()){
				log.info("預更新結束");
				break;
			}
		}

	}

當呼叫executorService.shutdown()方法的時候,執行緒池並不會立刻關閉,而是會將其中的任務執行完畢才會關閉。
而ShutdownNow()就叼多了,直接關閉,不管還有沒有任務執行。
而只要執行過shutdown()方法,isShutdown()就為true;
而當其中任務執行完成的時候,isTerminated()才為true;
所以採用一個自旋+判斷isTerminated()的方法來確定任務是否執行完成。