我读过的杀死线程的四种常用方法是:
方法四解决了我的问题,但从我的理解,它是禁忌使用所以我只是想确保方法一到三不适合我。
没有睡觉或等待所以方法不起作用。没有while循环,但有几个for循环,所以方法二不起作用。我只有一个线程没有与其他线程同步,所以方法三不起作用。因此,我使用方法四是正确的,对吧?
我的应用程序在一个线程上执行CPU密集型算法。当用户退出GUI时,我希望计算停止。
答案 0 :(得分:1)
我个人更喜欢方法2 Poll a flag variable
,我不明白为什么你也不能使用它。
那么,你有几个for
循环,对吗?尝试以下方法:
for(int i=0; i< data1.length && !abortFlag; i++)
{
//Do stuff
for(int j=0; j< data2.length && !abortFlag; j++)
{
//Do more stuff
for(int k=0; k< data3.length && !abortFlag; k++)
{
//Do even more stuff
}
}
}
想要中止后,只需设置abortFlag = true;
最后一件事。我认为重要的是要了解for
和while
循环之间没有真正的区别。差别只是语义,你可以用两者完成相同的任务。
修改强>
根据@ Patrik的评论,当您为管理线程(在这种情况下为abortFlag
)共享变量时,它应该被标记为volatile:volatile int i;