时间:2021-05-20
在多线程中,为了使线程安全,我们经常会使用synchronized和Lock进行代码同步和加锁,但是具体两者有什么区别,什么场景下适合用什么可能还不大清楚,主要的区别大致如下:
区别
1、synchronized是java关键字,而Lock是java中的一个接口
2、synchronized会自动释放锁,而Lock必须手动释放锁
3、synchronized是不可中断的,Lock可以中断也可以不中断
4、通过Lock可以知道线程有没有拿到锁,而synchronized不能
5、synchronized能锁住方法和代码块,而Lock只能锁住代码块
6、Lock可以使用读锁提高多线程读效率
7、synchronized是非公平锁,ReentranLock可以控制是否公平锁
从Lock接口中我们可以看到主要有5个方法,这些方法的功能从注释中可以看出:
lock():获取锁,如果锁被暂用则一直等待unlock():释放锁tryLock(): 注意返回类型是boolean,如果获取锁的时候锁被占用就返回false,否则返回truetryLock(long time, TimeUnit unit):比起tryLock()就是给了一个时间期限,保证等待参数时间lockInterruptibly():用该锁的获得方式,如果线程在获取锁的阶段进入了等待,那么可以中断此线程,先去做别的事 通过 以上的解释,大致可以解释在上个部分中“锁类型(lockInterruptibly())”,“锁状态(tryLock())”等问题,还有就是前面子所获取的过程我所写的“大致就是可以尝试获得锁,线程可以不会一直等待”用了“可以”的原因。运行结果:
t1 has gotten the lock!t1 has unlocked the lock!t2 has gotten the lock!t2 has unlocked the lock!运行结果:
t1 has gotten the lock!t1 has unlocked the lock!I'm t2. Someone has gotten the lock!看到这里相信大家也都会使用如何使用Lock了吧,关于tryLock(long time, TimeUnit unit)和lockInterruptibly()不再赘述。前者主要存在一个等待时间,在测试代码中写入一个等待时间,后者主要是等待中断,会抛出一个中断异常,常用度不高,喜欢探究可以自己深入研究。
以上就是Java 多线程Synchronized和Lock的区别的详细内容,更多关于Java 多线程Synchronized和Lock的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在java多线程编程中经常volatile,有时候这个关键字和synchronized或者lock经常有人混淆,具体解析如下:在多线程的环境中会存在成员变量可见
在Java并发编程的世界里,synchronized和Lock是控制多线程并发环境下对共享资源同步访问的两大手段。其中Lock是JDK层面的锁机制,是轻量级锁,
synchronize和lock区别如下: 1、synchronized和lock的用法区别。synchronized:在需要同步的对象中加入此控制,sync
本文介绍了多线程实现多个窗口售票问题的两种枷锁方式,分别是synchronized和lock()和unlock()具体代码如下:第一种:packageRunna
synchronized和lock的异同如下: 1、首先synchronized是java内置关键字,在jvm层面,Lock是个java类; 2、synch