0

私がやろうとしていることは次のとおりです。1つのボタンを押すと、単純な値が変更されます。値が 3 秒間変化しない場合、メソッドを実行したい。したがって、ボタンをクリックするたびに開始する(そして他のすべてを殺す)単一のスレッドが必要です。知っている

Executor executor = Executors.newSingleThreadScheduledExecutor();

しかし、遅れることはできません。これを行うためのベストプラクティスは何ですか?

4

2 に答える 2

1

ボタンがクリックされるとすぐにスレッドを開始し、最初の命令として実行し、値が変更されていないかどうかを確認しThreadます。スレッドを開始する前に、別のスレッドが既に存在するかどうかを確認し、存在する場合はそれを呼び出して処理し、正常に終了します。RunnableThread.sleep(3000)interrupt()InterruptedException

新しい並行 API を使用する場合は、 が(単純な ではなく) をExecutors.newSingleThreadScheduledExecutor()返す ことに注意してください。これにより、名前が示すように遅延を伴うスレッドの開始が可能になります。Javadocを確認してください。ScheduledExecutorServiceExecutor

于 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 に答える