代码1:
/** * stop 方法已过时; * * 如何停止线程? * 只有一种,run方法结束。 * 开启多线程运行,运行代码通常是循环结构。 * * 只要控制住循环,就可以让run方法结束,也就是线程结束。 * * 特殊情况: * 当线程处于冻结状态。 * 就不会读取到标记,那么线程就不会结束。 * * 当没有指定的方式让冻结的线程恢复到运行状态时,这是需要对冻结状态进行清除。 * 强制让线程恢复到运行状态来。这样就可以操作标记让线程结束。 * * Thread类提供该方法 interrupt(); * */ class StopThread implements Runnable { private volatile boolean flag = true; public synchronized void run() { while(flag) { try { wait(); } catch (InterruptedException e) { System.out.println(Thread.currentThread().getName()+".....Exception"); this.flag=false; } System.out.println(Thread.currentThread().getName()+"......run"); } } public synchronized void changeFlag() { this.flag=false; } } /** * 测试 * */ class Test { public static void main(String[] args) { StopThread st = new StopThread(); Thread t1 = new Thread(st); Thread t2 = new Thread(st); t1.start(); t2.start(); int num = 0; while (true) { if (num++==60) { /* 这样控制使线程停止 或 在 InterruptedException 异常处理,设置标志使线程停止 */ //st.changeFlag(); t1.interrupt(); t2.interrupt(); break; } System.out.println(Thread.currentThread().getName()+"........"+num); } System.out.println("over"); } }
运行结果:
线程结束成功!