2014-02-28 46 views
0

我的問題是關於ExecutorService類的shutdown()方法。如果我在無限循環中調用submit()方法......我是否需要撥打shutdown()?基本上我有這樣的事情(在此僞代碼):在無限循環內調用ExecutorService submit()

for(;;){ 
    for(some event){ 

    if(some event does something i want to capture){ 
     threadPool.submit()  
    } 
    } 
} 

所以與建立像上面的時候適合調用shutdown()?在我的實際代碼中,當我嘗試在無限循環外調用shutdown()時,出現無法訪問的代碼錯誤 - 我明白這一點。但在我看來,我可能不會撥打shutdown()方法。你們有什麼感想?

回答

2

建議通過指示迴路中的停止事件類型break

boolean have_received_stop_event = false; 
while (!have_received_stop_event) 
{ 
    for(some event) 
    { 
     if(stop-event) 
     { 
      have_received_stop_event = true; 
      break; 
     } 

     if(some event does something i want to capture) 
     { 
      threadPool.submit()  
     } 
    } 
} 

主循環退出後,然後調用shutdown()

+1

也許使布爾易失性,如果它是從不同的線程設置? –

+0

@GrahamGriffiths,但它不是從一個不同的線程設置。當該線程收到停止事件時它被設置。 – hmjd

0

如果有一個try-catch塊封閉這個無限循環,你可以在catch塊中調用shutdown。這將允許您在發生異常時收拾整理。