读书人

【多线程】线程的终止

发布时间: 2012-10-06 17:34:01 作者: rapoo

【多线程】线程的停止
Thread类中stop方法停止线程存在安全隐患,怎么让一个线程停止运行呢?
线程的运行一般都是循环控制体,通过改变run方法
循环控制条件,即可让线程停止。

class ThreadStopDemo {public static void main(String[] args) {ThreadStop ts=new ThreadStop();Thread t1=new Thread(ts);Thread t2=new Thread(ts);t1.start();t2.start();int num=0;while(true){ if(num++==50)    { ts.changeFlag(); break;    }System.out.println(Thread.currentThread().getName()+"main...run"+num);}  System.out.println("over");}}class ThreadStop implements Runnable{private boolean flag=true;public void run(){while(flag)   {        System.out.println(Thread.currentThread().getName()+"ThreadStop......run");   }}public void changeFlag(){flag=false;}}


但是在有特殊情况,比如线程处于冻结状态(wait sleep),改变循环控制条件并不能
停止线程,那么该如何处理呢?----可以使用interrupt方法强制唤醒线程,再改变run方法的循环控制条件,让线程停止运行。
class ThreadStopDemo1 {public static void main(String[] args) {ThreadStop ts=new ThreadStop();Thread t1=new Thread(ts);Thread t2=new Thread(ts);t1.start();t2.start();int num=0;while(true){ if(num++==50)    { t1.interrupt(); t2.interrupt(); break;    }System.out.println(Thread.currentThread().getName()+"main...run"+num);}  System.out.println("over");}}class ThreadStop implements Runnable{private boolean flag=true;public synchronized void run(){while(flag)   {try{wait();}catch (InterruptedException e){System.out.println(Thread.currentThread().getName()+"ThreadStop......Exception");flag=false;}        System.out.println(Thread.currentThread().getName()+"ThreadStop......run");   }}}

读书人网 >编程

热点推荐