鍍金池/ 問(wèn)答/Java  Linux/ 如何判斷線程池ExecutorService是否有任務(wù)正在執(zhí)行

如何判斷線程池ExecutorService是否有任務(wù)正在執(zhí)行

判斷一個(gè)線程是否已經(jīng)執(zhí)行可以使用.isAlive()方法判斷,那判斷線程池executorService里面是否有正在執(zhí)行的任務(wù)該怎么辦呢,請(qǐng)前輩指教,網(wǎng)上沒(méi)有查到

回答
編輯回答
不討囍

首先調(diào)用 shutdown 或 shutdownNow,然后調(diào)用isTerminated,返回:如果有任務(wù)正在執(zhí)行,則返回false。

exe.shutdown();  
        System.out.println("shutdown():?jiǎn)?dòng)一次順序關(guān)閉,執(zhí)行以前提交的任務(wù),但不接受新任務(wù)。");  
        while(true){  
            if(exe.isTerminated()){  
                System.out.println("所有的子線程都結(jié)束了!");  
                break;  
            }  
            Thread.sleep(1000);    
        }  
2018年6月5日 16:33
編輯回答
心沉
Future future = executorService.submit(new Callable(){
    public Object call() throws Exception {
        System.out.println("Asynchronous Callable");
        return "Callable Result";
    }
});

System.out.println("future.get() = " + future.get());
  1. 異步計(jì)算的發(fā)起線程(控制線程):負(fù)責(zé)異步計(jì)算任務(wù)的分解和發(fā)起,把分解好的任務(wù)交給異步計(jì)算的work線程去執(zhí)行,發(fā)起異步計(jì)算后,發(fā)起線程可以獲得Futrue的集合,從而可以跟蹤異步計(jì)算結(jié)果。

參考:Java并發(fā)編程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable

2018年7月20日 20:42