同步方法和lock的区别
来源:互联网 发布:qq亲密度算法 编辑:程序博客网 时间:2024/05/21 06:37
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候
线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情
ReentrantLock获取锁定与三种方式:
a) lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
c)tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
2、synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中
3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;
线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情
ReentrantLock获取锁定与三种方式:
a) lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
c)tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
2、synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中
3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;
0 0
- 同步方法和lock的区别
- lock和synchronized的同步区别与选择
- 同步方法和异步方法的区别
- Spin lock 和 Mutex lock的区别
- java中实现同步的两种方式:syschronized和lock的区别和联系
- java中实现同步的两种方式:syschronized和lock的区别和联系
- java中实现同步的两种方式:syschronized和lock的区别和联系
- java中实现同步的两种方式:syschronized和lock的区别和联系
- java中实现同步的两种方式:syschronized和lock的区别和联系
- 线程的同步控制synchronized和lock的对比和区别
- java中实现同步的两种方式:syschronized和lock的区别和联系
- java.util.concurrent.locks.Lock类的lock和lockInterruptibly方法的区别
- Latch 和lock的区别
- synchronized和lock的区别
- Lock和Monitor的区别
- latch和lock的区别
- lockInterruptibly 和lock的区别
- synchronized和Lock的区别
- [CrackCode] 1.4 Write a method to decide if two strings are anagrams or not
- 鼠标右键
- HDU 4549 M斐波那契数列 (费马小定理降幂&矩阵快速幂)
- Reorder List (LeetCode)
- 已知递推式求第N项的O(logN)算法 (递推式转化为矩阵)
- 同步方法和lock的区别
- css常用属性
- quicksort
- 领域驱动设计案例【Tiny Library用户界面】
- 四象分體度
- CQRS体系结构模式实践案例【Tiny Library简介】
- CQRS体系结构模式实践案例【Tiny Library系统架构】
- CQRS体系结构模式实践案例【Tiny Library对象的行为和状态】
- 天地合德 三十二