public static void main(String[] args) throws InterruptedException {
ReentrantLock rLock = new ReentrantLock();
Thread rThread = new Thread(() -> {
try {
rLock.lockInterruptibly();
// 检测线程是否中断
for (int i = 0; i < 1000000 && !Thread.currentThread().isInterrupted(); i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
} catch (InterruptedException e) {
System.out.println("获取锁的过程中被中断了");
e.printStackTrace();
} finally {
rLock.unlock();
}
});
rThread.start();
TimeUnit.MILLISECONDS.sleep(1);
rThread.interrupt();
}
老师的代码演示的是ReentrantLock lockInterruptibly方法在获取锁的过程中是可以被中断的
但是如果线程已经获取到锁,想要中断线程还是需要使用isInterrupted检测线程是否被中断
个人理解:
线程都是可以被中断的(需要检测或者响应中断),这Thread类的能力,与使用synchronized、ReentrantLock无关
但是线程在获取锁的过程中:
获取synchronized锁的过程中,线程是不能被中断的
使用ReentrantLock的lockInterruptibly方法在获取锁的过程中,线程是可以被中断的
如有不对,还望老师指正