ThreadPool存在奇怪的Java并发问题



我遇到了一些奇怪的并发问题,希望有人能帮我解决。这是有问题的代码:http://pastebin.com/HuDqknNZ

出于某种原因,我必须有

executor.execute(new Runnable(){
        @Override
        public void run() {}
});

放置在构造函数内部。否则,程序将在一段时间(约20秒(后崩溃。这对我来说毫无意义,因为Runnable什么都不做,但不知何故,它会影响执行器并防止崩溃。

EventManager类中不需要线程。

我假设,它被用作Listener并保存EventExecutors。当触发时,它会影响事件执行器并触发它。

如果没有事件,您的MainProgam(事件管理器除外(将关闭应用程序(您没有显示什么是主程序以及它如何在您的上下文中使用EventManagerEvent(

private final ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(new Runnable(){
            @Override
            public void run() {}
        });

以上几行没有在您的程序中执行任何活动。它只是阻止系统/JVM停止运行。一旦启动了executor,就必须调用shutdown()来关闭ExecutorService-在EventManager类中检查Shutdown方法

这就是为什么在没有这个块的情况下,你的代码在20分钟后(可能在所有事件执行后(关闭(在术语崩溃中(。如果你的构造函数中有这个,那么你需要调用shutDown来关闭它,否则它将保持活动。

这不是等待event 的合适方式

更新:

 An unused ExecutorService should be shut down to allow reclamation of its resources

来自Java API

相关内容

  • 没有找到相关文章

最新更新