Synchronized与ReentrantLock(重入锁)的区别
程序员文章站
2024-01-07 23:08:22
这两种方式最大区别就是对于Synchronized来说,它是java语言的关键字,是原生语法层面的互斥,需要jvm实现。而ReentrantLock它是JDK 1.5之后提供的API层面的互斥锁,需要lock()和unlock()方法配合try/finally语句块来完成。很明显Synchronized的使用比较方便简洁,并且由编译器去保证锁的加锁和释放,而ReenTrantLock需要手工声明来加锁和释放锁。synchronized 竞争锁时会一直等待;ReentrantLock 可以尝试获取锁,并得...
这两种方式最大区别就是对于Synchronized来说,它是java语言的关键字,是原生语法层面的互斥,需要jvm实现。而ReentrantLock它是JDK 1.5之后提供的API层面的互斥锁,需要lock()和unlock()方法配合try/finally语句块来完成。
很明显Synchronized的使用比较方便简洁,并且由编译器去保证锁的加锁和释放,而ReenTrantLock需要手工声明来加锁和释放锁。
synchronized 竞争锁时会一直等待;ReentrantLock 可以尝试获取锁,并得到获取结果
synchronized 获取锁无法设置超时;ReentrantLock 可以设置获取锁的超时时间
synchronized 无法实现公平锁;ReentrantLock 可以满足公平锁,即先等待先获取到锁
synchronized 控制等待和唤醒需要结合加锁对象的 wait() 和 notify()、notifyAll();ReentrantLock 控制等待和唤醒需要结合 Condition 的 await() 和 signal()、signalAll() 方法
本文地址:https://blog.csdn.net/eric_aprilwang/article/details/107675449
推荐阅读
-
Synchronized与ReentrantLock(重入锁)的区别
-
synchronized与ReentrantLock实现共享资源的消费
-
透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别
-
透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别
-
售票情景解读synchronized和Lock两种锁的区别
-
多线程通信的两种方式? (可重入锁ReentrantLock和Object)
-
synchronized与ReentrantLock实现共享资源的消费
-
面试刷题16:synchronized和ReentrantLock的区别?
-
lock与synchronized的区别
-
linux中各种锁机制的使用与区别详解