2014-02-28 49 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。这将允许您在发生异常时收拾整理。