如何停止线程
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++;
}
} }