Java 指示一个线程在被另一个线程触发时执行代码

Java 指示一个线程在被另一个线程触发时执行代码,java,multithreading,Java,Multithreading,在我的程序中,我使用ExecutorService调用一个线程,该线程将运行一段代码,该代码将在应用程序的后台运行,并向gui发送事件以更新它。当结束时满足一个条件,该条件告诉gui重置按钮和计数,线程将结束 我通过以下方式开始线程: ExecutorService executor = Executors.newFixedThreadPool(1); executor.execute(new RunOnTimer(this)); // RunOnTimer starts a thread wi

在我的程序中,我使用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时,主线程和新线程之间会发生一些事情


有没有什么方法可以让主线程执行新线程可以执行的代码?我只想让新线程执行其run块并为gui发送事件。如果可能,有哪些方法可以这样做?

如果您在executor中重复运行任务,那么我的建议是在程序开始时创建一次executor,然后对每个任务使用相同的executor。创建多个执行者没有任何价值。每个人都可以执行多个任务。在构造任务时,传入一个对象,该对象可用于表示任务已完成。考虑未来、完全未来或阻塞队列。此外,您可能需要CompletionService而不是ExecutorService。

事件是否设置了一个在您再次运行任务之前不会清除的标志?