我遇到了一些奇怪的并发问题,希望有人可以帮助我。 这是有问题的代码:http://pastebin.com/HuDqknNZ
由于某种原因,我必须
executor.execute(new Runnable(){
@Override
public void run() {}
});
放在构造函数中。如果没有,程序将在一段时间后(大约20秒)崩溃。 这对我来说完全没有意义,因为Runnable什么都不做,但不知何故它会影响执行程序并防止崩溃。
答案 0 :(得分:1)
EventManager
课程不需要线程化。
我假设它被用作监听器并持有EventExecutors
。当偶然发射时,它正在向事件执行者发射并射击它。
如果您的MainProgam(事件管理器除外)没有事件关闭应用程序(您尚未显示什么是主程序以及它如何使用EventManager
以及您的上下文中的Event
是什么
private final ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(new Runnable(){
@Override
public void run() {}
});
以上各行未在您的计划中执行任何活动。它只是停止System / JVM关闭。启动执行程序后,您必须致电shutdown()
关闭ExecutorService
- 检查Shutdown
班级中的EventManager
方法
这就是为什么没有这个阻止你的代码在20分钟后关闭(在你的术语崩溃中)(可能在所有事件执行之后)。如果你在构造函数中有这个,那么你需要调用shutDown来关闭它,否则它会保持活跃。
这不是等待event
更新:
An unused ExecutorService should be shut down to allow reclamation of its resources
来自Java API