java停止线程 interrupt 和守护线程setDaemon

来源:互联网 发布:如何导入sql数据库 编辑:程序博客网 时间:2024/09/21 06:35
package day12;/*stop方法已经过时。如何停止线程?只有一种,run方法结束。开启多线程运行,运行代码通常是循环结构。只要控制住循环,就可以让run方法结束,也就是线程结束。特殊情况:当线程处于了冻结状态。就不会读取到标记。那么线程就不会结束。当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。Thread类提供该方法 interrupt(); */public class ThreadDemo7 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubmenth_2();}public static void menth_2(){ThreadDemo2 td=new ThreadDemo2();Thread t1=new Thread(td);Thread t2=new Thread(td);//s守护线程    主线程是前台线程  当前台线程结束的时候后台线程也结束   t1.setDaemon(true);t2.setDaemon(true);t1.start();t2.start();int num=0;while(true){num++;if(num==100){break;}System.out.println(Thread.currentThread().getName()+"    main "+num);}System.out.println("ovwer");}public static void menth_1(){ThreadDemo td=new ThreadDemo();Thread t1=new Thread(td);Thread t2=new Thread(td);t1.start();t2.start();int num=0;while(true){num++;if(num==100){t1.interrupt();t2.interrupt();break;}System.out.println(Thread.currentThread().getName()+"    main "+num);}System.out.println("ovwer");}}//2class ThreadDemo2  implements Runnable{private boolean flag=true;public   void run(){while(flag){System.out.println(Thread.currentThread().getName()+"   run");   }}public   void changeflag(){flag=false;}}//1class ThreadDemo  implements Runnable{private boolean flag=true;public synchronized  void run(){while(flag){try {this.wait(); //当线程进入到等待状态的时候  就没有办法结束线程  这个时候i就要用到  强制结束线程  的方法  interrupt  强制结束线程  在catch中处理异常} catch (InterruptedException e) {// TODO: handle exceptionSystem.out.println(Thread.currentThread().getName()+"    Exception");flag=false;}System.out.println(Thread.currentThread().getName()+"   run");   }}public   void changeflag(){flag=false;}}


0 0
原创粉丝点击