在操作过程中停止工作线程

时间:2014-02-23 04:36:50

标签: multithreading

我有一个简单的用户界面,有两个按钮'开始'和'停止'。当用户单击“开始”时,我必须执行冗长的操作,因此我启动工作线程以保持UI响应。现在,如果用户单击“停止”,我需要尽快停止操作。

  1. 实现这一点的一种方法是工作线程函数每秒检查bool bStop = false,如果用户单击Stop,我们从Stop按钮处理程序将bStop设置为true,工作线程停止当前操作。

  2. 另一种方法是使用句柄杀死线程。

  3. 有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

您可以通过TPL查看新的取消功能。

http://msdn.microsoft.com/en-us/library/dd997396(v=vs.110).aspx

答案 1 :(得分:0)

这取决于您的环境,@ Coder777。

通常,取消作业需要将作业编程为接受取消请求并进行适当清理以避免部分失败状态。在极少数环境中,简单地杀死线程是安全的(这些环境已被专门编码以有序地处理线程终止)。

如果作业是非阻塞的,则可以在作业的一个或多个阶段检查标记,以确定是否应取消作业;如果取消,优雅地终止作业,清理资源等。如果作业可以阻止,例如,在IO上,则需要确保该块是可中断的并且异步通知它,或者允许该块在检查取消后定期超时并恢复它的阻塞。

请参阅以下文章,了解如何在Java中完成此任务:

How to stop a java thread gracefully?   How to properly stop the Thread in Java?   http://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousChannel.html