日期:2014-05-20  浏览次数:20710 次

关于线程的开启跟关闭。。
先说明 我比较笨 基础比较差 悟性也比较差。。

我用

public void start(){
new Thread(new SnakeDriver()).start();
}

这个方法开启了一个线程要怎么关闭

public void stop(){
//这里写什么啊
}

或者有什么好的方法没有。。


------解决方案--------------------
run函数内容执行完毕后,退出函数时线程自然就结束了。

但如果要主动去终止线程,则要靠自己在run函数中处理,建议可以Google下相关资料:Java Thead 终止。

类似于:
private boolean flag = true;
public void run() {
while (flagRun) {
// 工作任务。
}
}
------解决方案--------------------
你的线程是匿名的啊。。。。。。

我提2个方案:

一、不用匿名线程,个线程起名
SnakeDriver sd;
sd=new SnakeDriver();
sd.start();
...............
sd.stop();

二、用Thread.getcurrentThread()来获取当前线程,再关闭它
Thread.getcurrentThread().stop();




------解决方案--------------------
对于有循环体的线程的关闭,JDK已经不建议直接用stop方法来进行线程终止,一般来讲,有2种方法:
1.设置一个标志字段,如1楼的做法,用这个标志字段去控制线程跳出循环。
2.利用try{ while(true) ……}……catch(Interrupted e){……},在外部方法中调用线程的interrupt方法抛出InterruptedException来使线程终止。当然,只使用其中某一种是有局限的,完善的做法是二者结合使用,见下面的博文:
http://blog.sina.com.cn/s/blog_4b69a6bb0100d5pg.html

------解决方案--------------------
Java code
public class MThread extends Thread{

   private volatile boolean flag = true;
   
   public void run(){
     while(flag){
        try{
        //do something
       }catch(InterruptedException ie){
       
       }
     }
   }
   public void stopThread(){
      flag = false;
      interrupt();  
   }