public class ThreadDemo5 {
public static void main(String[] args) {
Object o = new Object();
/*
* synchronized 隐式可重入锁,也叫递归锁 特点 只需外层获取锁即可
* */
new Thread(()->{
synchronized (o){
System.out.println(Thread.currentThread().getName()+" 外层");
synchronized (o){
System.out.println(Thread.currentThread().getName()+" 中层");
synchronized (o){
System.out.println(Thread.currentThread().getName()+" 内层");
}
}
}
},"t1").start();
Lock lock = new ReentrantLock();
/*
* Lock 显式可重入锁
* */
new Thread(()->{
try{
//上锁
lock.lock();
System.out.println(Thread.currentThread().getName()+" 外层");
try{
//上锁
lock.lock();
System.out.println(Thread.currentThread().getName()+" 内层");
}finally {
//释放锁
lock.unlock();
}
}finally {
//释放锁
lock.unlock();
}
},"t2").start();
}
}
多线程与锁(九)之可重入锁演示
最新推荐文章于 2024-09-25 11:06:23 发布
这篇博客探讨了Java中的线程同步机制,主要关注隐式可重入锁(synchronized关键字)和显式可重入锁(ReentrantLock)。通过示例代码展示了如何使用这两种锁,并解释了它们的递归特性及释放锁的注意事项。
摘要由CSDN通过智能技术生成