ReentrantLock还是synchronized?

来源:互联网 发布:淘宝店铺流量突然下降 编辑:程序博客网 时间:2024/05/23 00:34
与目前的 synchronized 实现相比,争用下的 ReentrantLock 实现更具可伸缩性。(在未来的 JVM 版本中,synchronized 的争用性能很有可能会获得提高。)这意味着当许多线程都在争用同一个锁时,使用 ReentrantLock 的总体开支通常要比 synchronized 少得多。

清单 1. 用 ReentrantLock 保护代码块。

Lock lock = new ReentrantLock();lock.lock();try {   //相应业务操作}finally {  lock.unlock(); }

建议用 synchronized 开发,直到确实证明 synchronized 不合适

class LoanTask{static String LOAN_STATUS = "LOAN_STATUS";}class BorrowTask{public Object getLock() {return LoanTask.LOAN_STATUS;}Object lock = getLock();synchronized (lock) {lock.notifyAll();//必须先跟synchronized配合使用}}

参考示例程序:lock与unlock


回过头来再来看看JDK 5.0的ReentrantLock类,它完全实现了synchronized语义上的全部功能,并且还能具备诸如条件锁、锁超时、公平锁等等更优越的特性(特别值得一提的是tryLock的功能也实现了,就是说可以判定假如这个时间获取锁是否能够成功),甚至在并发量居高不下时,性能还更加优越……我不禁要问,用一个Java实现的锁类去从功能上代替一个已有的同步关键字,这岂不是Java自己在抽自己嘴巴?

0 0
原创粉丝点击