本文主要讲解Java线程在sleep状态被interrupt唤醒的相关代码案例,我们来一起学一下吧!
在java中,当线程处于sleep、wait、join等状态时,如果其他线程调用该线程的interrupt中断该线程,该线程会被强制唤醒,并抛出java.lang.InterruptedException中断异常。我们结合一个代码案例来看一下:
package com.panziye.thread;
import org.junit.Test;
public class ThreadSleep {
@Test
public void test() {
// 使用lambada创建t1线程
Thread t1 = new Thread(()->{
System.out.println("sleep");
try {
// 休眠2s
Thread.sleep(2000);
} catch (InterruptedException e) {
// 唤醒
System.out.println("wake up");
e.printStackTrace();
}
// t1线程运行结束
System.out.println("t1 over");
}, "t1");
// 启动t1线程
t1.start();
// 主线程休息1s,保证t1线程进入sleep状态
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("interrupt");
// 中断t1线程
t1.interrupt();
// 测试线程结束
System.out.println("test over");
}
}
我们发现当主线程调用interrupt方法时,t1线程被唤醒了,并且抛出了InterruptedException中断异常,由于我们try-catch了,所以继续运行t1中的后续代码,直到t1运行结束。
以上就是Java线程sleep被interrupt唤醒案例的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客(www.panziye.com),学习愉快哦!