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可能最适合访问相同锁的大量线程.同步块也不保证等待进入它的线程被授予访问权限的顺序.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...