0

我想做的是:按一个按钮更改简单的值。如果值保持 3 秒不变,我想执行我的方法。所以我需要一个线程,它会在每次按钮单击时启动(并杀死所有其他线程)。我知道

Executor executor = Executors.newSingleThreadScheduledExecutor();

但不能有延迟。这样做的最佳做法是什么?

4

2 回答 2

1

您可以简单地使用旧Thread类或Runnable接口:单击按钮后立即启动线程,Thread.sleep(3000)作为第一条指令执行,然后检查值是否不变。在启动线程之前检查另一个线程是否已经存在,如果有的话,调用interrupt()它并处理它InterruptedException以优雅地终止它。

如果您想使用较新的并发 API,请注意Executors.newSingleThreadScheduledExecutor()返回 a ScheduledExecutorService(不是简单的Executor),并且顾名思义,它允许延迟启动线程。检查Javadoc

于 2015-06-04T10:58:01.240 回答
0

您可以使用简单Thread的启动-停止/中断,也可以使用 API 之类的ScheduledExecutorService. 下面
是如何处理的示例ScheduledExecutorService

//Start as many threads as you want upon button click... (since you said i want to kill all other threads, so i assume you want to start some threads soon upon button click)
            ScheduledExecutorService service = Executors.newScheduledThreadPool(3);
            service.schedule(new Thread(), 0, TimeUnit.SECONDS);
            service.schedule(new Thread(), 0, TimeUnit.SECONDS);
            service.schedule(new Thread(), 0, TimeUnit.SECONDS);

            //Start single thread after 3 seconds.
            ScheduledExecutorService serviceCheck = Executors.newScheduledThreadPool(3);
            serviceCheck.schedule(new Thread(), 3, TimeUnit.SECONDS);
            //In this thread created using "serviceCheck", check with value has not changed then use `service.shutdownNow();` to shutdown all previously started threads and then do whatever you want. 
于 2015-06-04T11:10:01.607 回答