在无限循环内调用ExecutorService submit()

时间:2014-02-28 15:13:23

标签: java multithreading executorservice

我的问题是关于ExecutorService类的shutdown()方法。如果我在无限循环中调用submit()方法...我是否需要调用shutdown()?基本上我有这样的东西(这里是伪代码):

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

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

因此,如果适合调用shutdown(),可以使用上述设置吗?在我的实际代码中,当我尝试在无限循环之外调用shutdown()时,我得到无法访问的代码错误 - 我理解。但在我看来,我可能不会调用shutdown()方法。你们觉得怎么样?

2 个答案:

答案 0 :(得分:2)

建议传递 stop 事件类型,指示循环到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)

如果有一个包含此无限循环的try-catch块,则可以在catch块中调用shutdown。这将允许您在抛出异常时进行整理。