1、使用一个volatile的共享变量
2、使用interrupt方法
import java.util.concurrent.TimeUnit;/** * ThreadTest */public class ThreadTest implements Runnable { private volatile boolean stop = false; @Override public void run() { while (!stop) { System.out.println(Thread.currentThread().getName() + " is running..."); try { TimeUnit.MILLISECONDS.sleep(1000); } catch (InterruptedException e) { System.out.println("wake up from block"); stop = true; } } System.out.println(Thread.currentThread().getName() + " is exiting..."); } public static void main(String[] args) { ThreadTest threadTest = new ThreadTest(); Thread t1 = new Thread(threadTest); t1.start(); try { TimeUnit.MILLISECONDS.sleep(3000); } catch (InterruptedException e) { // } // 1、使用 volatile共享变量 threadTest.stop = true; // 2、使用interrupt方法 System.out.println("Interrupt thread:" + t1.getName()); t1.interrupt(); try { TimeUnit.MILLISECONDS.sleep(3000); } catch (InterruptedException e) { // } System.out.println("Stopping application..."); }}
2种可能的运行结果:
Thread-0 is running...Thread-0 is running...Thread-0 is running...Interrupt thread:Thread-0Thread-0 is running...wake up from blockThread-0 is exiting...Stopping application...
或
Thread-0 is running...Thread-0 is running...Thread-0 is running...Interrupt thread:Thread-0Thread-0 is running...Thread-0 is exiting...Stopping application...