
請問大佬,為什么我的程式里多執行緒往list里加資料,結果會少。。
uj5u.com熱心網友回復:
shutdown之前,要先waitfinish.uj5u.com熱心網友回復:
子執行緒沒有執行結束,主執行緒先結束了,所以列印的數字當然就會少了。uj5u.com熱心網友回復:
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService service=Executors.newFixedThreadPool(50);
for(int i=0;i<1000*10000;i++) {
Task task=new Task("a string:"+" "+i);
service.execute(task);
}
service.shutdown();
while(!service.isTerminated()){};
System.out.println(list.size());
}
uj5u.com熱心網友回復:
樓上大佬說的對
uj5u.com熱心網友回復:
需要waitfinish,否則直接關閉執行緒池,任務可能沒有執行完uj5u.com熱心網友回復:
shutdown本身不會直接執行緒池關閉,會等待執行緒全部完成后才會關閉,shutdownnow會立即關閉執行緒池,但是main在執行完shutdown后面的列印陳述句時候,執行緒池內執行緒并沒有結束,所以列印的結果不是最終結果。uj5u.com熱心網友回復:
樓主的程式main執行緒結束先于執行緒池中的執行緒結束,所以得到的不是最終結果。uj5u.com熱心網友回復:
你用main方法測驗,main方法一結束就直接整個行程都停了。你要么是讓主執行緒一直保持住,每個幾秒鐘休眠下。或者你用springboot拉起一個行程uj5u.com熱心網友回復:
我認為6樓說的對
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/9640.html
標籤:Java SE
上一篇:大神求解,JSP時間節點
下一篇:jackson的工具類
