大对决:选择明智,Java中Synchronized与Lock的并发之战

废话少说,直接上正文

1. synchronized vs Lock

存在层次上

synchronized是java中的关键字,在JVM层面上
Lock是一个接口

锁的释放

synchronized:1. 代码执行完毕 2. 程序出现异常
Lock:在finally中必须释放锁,不然容易造成线程死锁

锁的获取

synchronized:假设A线程获得锁,B线程等待。如果A线程阻塞,B线程回一直等待
Lock:lock可以获取锁的状态,尝试获得锁,如果没有获得到锁,线程可以不用一直等待。

死锁

synchronized:在发生异常时候会自动释放占有的锁,因此不会出现死锁。
Lock:发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,不然可能会引起死锁的产生

锁的状态

synchronized:无法判断
Lock:可以判断

锁的类型

synchronized:可冲入 不可中断 非公平
Lock:可重入 可判断 可公平(两者皆可)

性能

synchronized:少量同步
Lock:大量同步

调度

synchronized:使用Object对象本身的wait、notify、notifyAll调度机制
Lock:可以使用Condition进行线程之间的调度

用法

synchronized:可以修饰在类,方法,代码块
Lock:一般使用ReentrantLock类做为锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值