微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 显式锁与隐式锁

使用Locks( java.util.concurrent.locks.Lock)而不是关键字synchronized方法wait()和方法notify()完全一样吗?

我可以使用锁(显式锁)而不是隐式锁(同步)来线程安全地编程吗?

据我所知,我一直在使用隐式锁.我知道Lock接口实现给出的优点,比如方法:isLocked(),getLockQueueLength(),getHoldCount()等…但是仍旧旧学校方式(wait()和notify())会有其他限制除了没有那些方法

我也知道用(布尔公平)参数构造一个锁的可能性,它允许缺乏饥饿.

解决方法

是的,绝对可以使用java.util.concurrent.locks.Lock编写线程安全的程序.如果你看到java.util.concurrent.locks.Lock的任何实现,像reentrantlock内部实现使用旧的synchronized块.

锁实现提供了比使用同步方法和语句获得的更广泛的锁操作.它们允许更灵活的结构,可能具有完全不同的属性,并且可以支持多个关联的Condition对象.

除了我的差异,synchronized关键字自然内置了语言支持.这可能意味着JIT可以以Locks无法实现的方式优化同步块.例如它可以组合synchronized blocks.synchronized最适合访问锁的少量线程,Lock可能最适合访问相同锁的大量线程.同步块也不保证等待进入它的线程被授予访问权限的顺序.

原文地址:https://www.jb51.cc/java/120526.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐