【发布时间】:2016-01-12 17:54:33
【问题描述】:
在我的程序中,我正在调用一个带有 ExecutorService 的线程,该线程将运行一段代码,该代码将在应用程序的后台运行,向 gui 发送事件以对其进行更新。当最后满足一个条件时,告诉 gui 重置按钮和计数,线程将结束。
我通过以下方式启动线程:
ExecutorService executor = Executors.newFixedThreadPool(1);
executor.execute(new RunOnTimer(this));
// RunOnTimer starts a thread with that instance of the class
然后线程将一直运行,直到满足条件:
//if this
fireNoMoreFilesEvent();
告诉 gui 重置然后执行器:
executor.shutdown();
executor.awaitTermination(100,TimeUnit.MILLISECONDS);
当我调试时,正在运行的线程被杀死,剩下的就是主线程。现在的问题是当我尝试在同一个程序实例中再次运行相同的执行时,线程启动然后突然退出而不执行任何代码。然后在发生这种情况后,我再次选择要执行的相同代码,它工作正常。
如果我尝试在调试中观察这种行为,代码将运行良好,并且新线程不会在不执行任何操作的情况下退出,所以我的猜测是当新线程发送时主线程和新线程之间发生了一些事情gui 的事件。
是否有一些方法可以让主线程执行新线程会执行的代码?我想要的只是让新线程执行它的运行块并为 gui 发送事件。如果可以的话,有哪些方法可以做到?
【问题讨论】:
-
事件是否设置了在您再次运行任务之前不会被清除的标志?
标签: java multithreading