我想杀死一个特定的线程,但无法想出让它工作的方法。 我接下来包括所有信息,即使它看起来不重要:
我使用操作栏sherlock并想要在动作按钮事件中杀死一个线程。所以,我有:
Thread myThread;
myThread = new Thread(new Runnable(){
public void run(){
functionX();
}
});
myThread.start();
这个线程是一个长时间运行的线程,funcionX()也创建了一些新线程。 我希望在以下情况下杀死该线程:
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case android.R.id.home:
myThread.interrupt();
break;
};
我尝试使用ExecutorService,使用submit(runnable)获取Future结果和Future.cancel,但似乎不起作用。 我还要提一下,functionX()使用http get请求从JSON服务获取数据。
答案 0 :(得分:5)
有多种方法可以做到这一点,其中几种可能就像
答案 1 :(得分:0)
来自rock_win的选项2是要走的路,你可以在这里找到附带一些代码的原因:
http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
答案 2 :(得分:0)
这个问题已经问了很多年了,但如果有人需要,那么您可以使用 thread.interrupt();
毫无问题地使用您的线程对象。如果您不熟悉 Java 或 Java 中的线程,并且想要停止线程而不更改很多内容或切换到不同的技术(例如 timertask),那么这没有任何问题,并且非常有用。
以防万一您需要再次启动线程,您需要重新初始化 Thread 对象来执行此操作。因此,为了做到这一点,我只是创建了一个实现 Runnable 的类,这样当我需要重新初始化线程对象时,我就不必输入太多内容。然后,每当我需要启动线程时,我都会调用
mythread = new Thread(new MyRunnable()); // initialize the thread
mythread.start(); // run the thread
然后当我需要停止它时:
mythread.interrupt(); //stop the thread
当我需要再次启动线程时,我不得不再次这样做:
mythread = new Thread(new MyRunnable()); //re-initialize the thread
mythread.start(); // start the new thread