Yat*_*oel 4 java user-interface multithreading
我用GUI创建了一个java程序,并在其上放置了一个"停止"按钮.当我启动程序时,主线程启动10个线程.现在我希望每当用户点击"停止"按钮时,所有线程都应该首先终止,然后主线程应该终止.我怎样才能做到这一点.
eri*_*son 12
这取决于你想要10个线程"终止"的方式,以及你如何运行线程.
我建议创建一个ExecutorService,并将"线程"编写为Runnable实现.这些Runnable对象应该interrupt()通过中止其任务,清理和run尽快退出方法来响应对其执行线程的调用.
将这些Runnable任务提交给主线程中的所有ExecutorService调用awaitTermination.当用户按下"停止"按钮时,shutdown或者shutdownNow根据需要ExecutorService(从事件发送线程)调用.
如果调用shutdownNow执行程序服务,它将通过中断其线程来通知正在运行的任务.如果你打电话shutdown,它将允许任务完成而不会中断.无论如何,您的主线程将阻塞,awaitTermination直到所有任务都完成(或时间限制用完).
当然,您可以使用自己创建和管理所有线程join.关键是如果你想要能够过早地阻止线程,就可以使线程中断.
首先,让我注意一下这个Thread类有一种诱人的方法叫做stop().不要使用它,这是危险的.
一种方法是编写10个线程来检查线程的中断状态.
例如
while (! Thread.interrupted())
{
// Do your thread's work
}
Run Code Online (Sandbox Code Playgroud)
您可以通过调用对象interrupt()上的方法来中断每个工作线程Thread,然后调用join()以等待线程实际完成.
给所有线程一个布尔的共享实例,并让它们定期检查它是否是true.如果它是trueThread应该从其run方法返回.true如果用户按下停止按钮然后使用Thread.join()等待所有线程,则将此布尔值设置为.
| 归档时间: |
|
| 查看次数: |
9335 次 |
| 最近记录: |