Java——线程的停止

来源:互联网 发布:硕鼠youtube下载器mac 编辑:程序博客网 时间:2024/06/07 07:41
/*线程的停止:stop方法已经过时了,那么只能是当线程的任务代码执行完线程自然结束任务代码中通常都有循环,所以只要让循环停下来,线程就能停下来方法:定义一个变量,然后控制循环stop():已过时。该方法具有固有的不安全行,用Thread.stop来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查ThreadDeath异常的一个自然后果),如果以前受这些监视器保护的任何对象都处于一种不一致的状态,则损坏的对象将其对其他程序可见,这有可能导致任意的行为,stop的许多实用都应由只修改某些变量以指示目标线程应该停止运行的代码来取代,目标线程应定期检查该变量,并且如果该变量指示它要停止运行,则从运行方法依次返回,如果目标线程等待很长时间(例如基于一个条件变量),则应使用interrupt方法来中断该等待*/class Demo implements Runnable{    boolean flag = true;    public synchronized void run(){        while(flag){            //如果线程一上来就等待,程序将结束不了            //线程进入等待状态,为了让线程结束,只能强制结束线程的等待状态            try{                wait();            }            catch(InterruptedException e){                e.printStackTrace();                flag = false;            }            System.out.println(Thread.currentThread().getName()+"...Hello World!");        }    }}class test{    public static void main(String[] args){        Demo demo = new Demo();        Thread t1 = new Thread(demo);        Thread t2 = new Thread(demo);        t1.start();        t2.start();        try{Thread.sleep(20);}catch(InterruptedException e){e.printStackTrace();}        int i = 1;        while(true){            if(i++==500){                //demo.flag = false;                //当调用interrupt时,线程就会发生异常,异常后将flag改为false,线程就能结束                t1.interrupt();                t2.interrupt();                break;            }        }    }}
原创粉丝点击