线程的唤醒interrupt
作者:binsleep、wait的进程都可以被interrupt打断,以此可以避免死等待
public class Part5 { private final static String PREFIX = "MARK-"; public static void main(String[] args) throws Exception{ threadSleep(); } /** * 线程的interrupt * @throws Exception */ private static void threadSleep() throws Exception{ Thread thread = new Thread(() -> { try { //推荐使用封装的TimeUnit方法 System.out.println("线程开始sleep 1分钟"); TimeUnit.MINUTES.sleep(1); System.out.println("被打断的话,sleep后面的不会执行了"); }catch (Exception e) { System.out.println("线程被打断sleep,继续执行"); } }); //启动线程 thread.start(); //sleep 5 s TimeUnit.SECONDS.sleep(5); //打断线程 thread.interrupt(); } }
interrupt不配被触发的情况,值得注意的是,如果非block情况,线程是不会被interrupt打断的。
Thread t1=new Thread(){ @Override public void run(){ while(true){ System.out.println("未被中断"); } } }; t1.start(); TimeUnit.SECONDS.sleep(2); t1.interrupt();
通过改写如下代码,自行判断是否被打断,
while(true && !this.isInterrupted()){ System.out.println("未被中断"); }