本文为笔者在学习过程中遇到的未解决的问题,请各位大牛帮忙在评论区或联系笔者解答
代码如下,问题见注释
/**
* 全程没有LockSupport.unpark()代码,但是控制台打印出了over字段
* LockSupport.park()在线程中并且之前有线程被中断时无法加锁
*
* 环境:jdk1.8,windows8
*/
private void testPermitBug() {
Thread thread1 = new Thread(()->{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println("睡眠被中断");
}
});
thread1.start();
waitAMoment();
thread1.interrupt();
Thread thread2 = new Thread(()->{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LockSupport.park();
System.out.println("over");
});
thread2.start();
waitAMoment();
printThreadState(thread2);
}
运行结果
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLxQDO2ADMwAjM5AzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
个人见解
在jdk源码LockSupport.java的第160行发现了这一句
这是park()方法的注释,说这个方法可能会无条件结束。。。不是吧
Github博客