0

以前に開始したすべてのスレッドを閉じたい。

Thread.currentThread()は現在のスレッドを提供しますが、他のスレッドはどうでしょうか? どうすれば入手できますか?

Thread.activeCount()はスレッドのスレッド グループ内のアクティブなスレッドの数を返すと思いますが、私は ThreadGroup を使用しません。Thread thread = new Thread(new MyRunnable())を使用してスレッドを開始しました。

では、どうすればこれを達成できますか?前もって感謝します...

4

3 に答える 3

4

代わりに、スレッド プールとタスクのキューを組み合わせた ExecutorService を使用できます。

ExecutorService service = Executors.newCachedThreadPool();
// or
ExecutorService service = Executors.newFixedThreadPool(THREADS);

// submit as many tasks as you want.
// tasks must honour interrupts to be stopped externally.
Future future = service.submit(new MyRunnable());

// to cancel an individual task
future.cancel(true);

// when finished shutdown
service.shutdown();
于 2012-10-31T09:25:24.070 に答える
2

すべてのスレッドへの参照をどこかに(リストなど)保持し、後で参照を使用することができます。

List<Thread> appThreads = new ArrayList<Thread>();

スレッドを開始するたびに:

Thread thread = new Thread(new MyRunnable());
appThreads.add(thread);

次に、終了を通知する場合(stop私は:Dを介さずに)、作成したスレッドに簡単にアクセスできます。

または、anを使用して、ExecutorService不要になったときにshutdownを呼び出すこともできます。

ExecutorService exec = Executors.newFixedThreadPool(10);
...
exec.submit(new MyRunnable());
...
exec.shutdown();

This is better because you shouldn't really create a new thread for each task you want to execute, unless it's long running I/O or something similar.

于 2012-10-31T09:29:11.710 に答える
1

Thread オブジェクトを直接使用し続け、 java.util.concurrentからすぐに使用できるスレッド サービスを使用しない場合は、開始されたすべてのスレッドへの参照を保持する必要があります (たとえば、それらをリストに入れる)。それらを閉じるか、中断して停止し、リストをループします。

于 2012-10-31T09:30:23.263 に答える