我在java android平台工作。我正在从主线程创建一个子线程。我想按我的要求停止子线程。我的子线程有一个简单的函数,它没有任何循环。我想要在我想要的时候杀死子线程并释放它正在使用的资源。我搜索了一下,发现了inturrupt()函数。我的主题是:
public class childThread implements Runnable{
public void run() {
firstFunction();
secondFunction();
}
}
主线程有以下代码来启动线程:
Thread tChild;
tChild = new Thread(new childThread(), "Child Thread");
tChild.start();
我的run()
函数是这样调用函数的。如何在其中使用interrupt()
?请告诉我杀除子线程和释放其资源的任何其他方法。
发布于 2013-06-15 12:28:00
通过线程的协作,您可以使用该线程支持的任何方法停止该线程。没有线程的合作,就没有合理的方法来阻止它。例如,假设线程持有锁并将共享资源置于无效状态。如果没有它的配合,你怎么能停止这个线程呢?
您有两个选择:
但这些都是你的选择--它不能靠魔法工作。
想象一个线程做工作,就像你的姐姐借你的车一样。如果你想要回你的车,你需要你姐姐的合作才能把它拿回来。你可以安排她在你需要车的时候自己回来,或者你可以安排你告诉她你什么时候需要车,然后她回来。但你不能改变这样一个事实,那就是她必须知道如何把车开回来,否则车就开不回来了。
线程操纵进程资源,并将它们置于无效状态。它们必须在终止之前进行修复,否则流程上下文将被破坏。
发布于 2013-06-15 12:05:49
由于您没有任何循环,其中检查Thread.interrupted()值,我假设您的firstFunction();secondFunction();做了大量工作,您将不得不在函数firstFunction();secondFunction();条件Thread.interrupted()中检查适当的点,如果为真,则结束该方法。我知道你没有循环,但概念上应该是这样的,
Runnable runnable = new Runnable() {
private int counter;
public void run() {
while(true){
System.out.println(">> Executing " + counter++);
if(Thread.interrupted()){
break;
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
Thread.sleep(10 * 1000);
thread.interrupt();
发布于 2013-06-15 11:47:01
您的子线程将需要定期检查Thread.interrupted()
,如果返回true,则退出。
你的代码是否有循环并不重要。您只需选择代码执行路径中的各个点,看看是否需要取消。
https://stackoverflow.com/questions/17123245
复制