java多线程快速入门(十九)
如何停止线程
1、使用stop方法强行终止线程(这个方法不推荐使用,可能会出现业务操作未执行完,线程中断了)
package com.cppdy; class MyThread15 extends Thread{ @Override public synchronized void run() { while(true) { try { wait(); } catch (Exception e) { } //如果这里有非常重要的代码块,是不是就出现问题了 System.out.println("Thread run------"); } } } public class ThreadDemo15 { public static void main(String[] args) throws Exception { MyThread15 mt = new MyThread15(); Thread thread1 = new Thread(mt); Thread thread2 = new Thread(mt); thread1.start(); thread2.start(); int count=0; while(true) { System.out.println("Main run------"); Thread.sleep(100); if(count==30) { thread1.stop(); thread2.stop(); break; } count++; } } }
2、使用interrupt方法中断线程(将业务操作执行完后再中断线程)
package com.cppdy; class MyThread15 extends Thread{ @Override public synchronized void run() { while(true) { try { wait(); } catch (Exception e) { } //如果这里有非常重要的代码块,是不是就出现问题了 System.out.println("Thread run------"); } } } public class ThreadDemo15 { public static void main(String[] args) throws Exception { MyThread15 mt = new MyThread15(); Thread thread1 = new Thread(mt); Thread thread2 = new Thread(mt); thread1.start(); thread2.start(); int count=0; while(true) { System.out.println("Main run------"); Thread.sleep(100); if(count==30) { thread1.interrupt(); thread2.interrupt(); break; } count++; } } }
3、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止
package com.cppdy; class MyThread15 extends Thread{ public volatile boolean flag=true; @Override public synchronized void run() { while(flag) { try { } catch (Exception e) { setFlag(flag); } System.out.println("Thread run------"); } } public void setFlag(boolean flag) { this.flag=flag; } } public class ThreadDemo15 { public static void main(String[] args) throws Exception { MyThread15 mt = new MyThread15(); Thread thread1 = new Thread(mt); Thread thread2 = new Thread(mt); thread1.start(); thread2.start(); int count=0; while(true) { System.out.println("Main run------"); Thread.sleep(100); if(count==30) { mt.setFlag(false); break; } count++; } } }