一般情况
package songyan; /* 如何停止线程? 只有一种,run方法结束。 开启多线程运行,运行代码通常是循环结构。 只要控制住循环,就可以让run方法结束,也就是线程结束。 */ class Demo implements Runnable{ boolean flag=true; public void run() { while(flag) { System.out.println(Thread.currentThread().getName()+"***run"); } } public void changeFlag() { flag=false; } } public class test { public static void main(String[] args) { Demo d= new Demo(); Thread t= new Thread(d); t.start(); int count =0; while(true) { count++; System.out.println("main***"+count); if(count==600) { d.changeFlag(); break; } } } }
特殊情况(线程冻结)
package songyan; /*
特殊情况:
当线程处于了冻结状态。
就不会读取到标记。那么线程就不会结束。
当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。
强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。
Thread类提供该方法 interrupt();
。 */ class Demo implements Runnable{ boolean flag=true; public synchronized void run() { while(flag) { try { this.wait(); } catch (Exception e) { System.out.println("jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj"); } System.out.println("run ******888888888888888888888888888888888888*"); } } public void changeFlag() { flag=false; } } public class test { public static void main(String[] args) { Demo d= new Demo(); Thread t= new Thread(d); t.start(); int count =0; while(true) { count++; System.out.println("main***"+count); if(count==600) { d.changeFlag(); t.interrupt();//中断线程(让线程重新获得运行资格) break; } } } }