Java 在并发应用程序设计中,使用锁接口如何比使用synchronise关键字提供更高的性能?

Java 在并发应用程序设计中,使用锁接口如何比使用synchronise关键字提供更高的性能?,java,concurrency,locking,synchronized,Java,Concurrency,Locking,Synchronized,我正在阅读“Java并发烹饪书”。在那篇文章中,作者提到使用锁接口比使用synchronized关键字提供了更高的性能。有人能告诉我怎么做吗?使用堆栈帧或方法调用数等术语。 别介意,请帮我摆脱java并发概念。锁和朋友的理由不是它天生比synchronized()快,而是它可以以不同的方式使用,而不一定对应于词法块结构,它还可以提供更多的功能,如读写锁、信号量计数等 特定的锁实现是否实际比同步快是一个没有实际意义的问题,取决于实现。Javadoc中肯定没有这样的声明。道格·莱斯(Doug Lea

我正在阅读“Java并发烹饪书”。在那篇文章中,作者提到使用锁接口比使用
synchronized
关键字提供了更高的性能。有人能告诉我怎么做吗?使用堆栈帧或方法调用数等术语。 别介意,请帮我摆脱java并发概念。

锁和朋友的理由不是它天生比
synchronized()
快,而是它可以以不同的方式使用,而不一定对应于词法块结构,它还可以提供更多的功能,如读写锁、信号量计数等

特定的
实现是否实际比
同步
快是一个没有实际意义的问题,取决于实现。Javadoc中肯定没有这样的声明。道格·莱斯(Doug Leas)的书[1]从一开始就没有说我能很快看到比“通常表现更好”更强大的东西


[1] :Lea,Java并发编程,第二版,Addison-Wesley 2000。

1同步是导致死锁问题的唯一原因,而锁不存在死锁问题

2在同步中,我们不知道在前一个线程释放锁后,一个线程会有多少时间获得机会。这可能会导致饥饿问题,而在锁的情况下,我们有它的实现类reentrant lock,它有一个构造函数,让您传递公平性属性作为它的参数之一,让等待时间最长的线程有机会获得锁

3在同步中,如果一个线程正在等待另一个线程,那么等待的线程将不会执行任何不需要锁访问的其他活动,但通过锁接口,有一个trylock()方法,您可以尝试访问锁,如果您没有获得锁,则可以执行其他备用任务。这有助于提高应用程序的性能

4没有api来检查有多少线程在等待一个特定的锁,而这可以通过锁接口实现类ReentrantLock方法实现


5使用带有holdCount()方法的锁接口可以更好地控制锁,这在同步中是找不到的。

作者还说了些什么?“请帮助我摆脱java并发概念。”什么D@EJP“锁定接口提供了比synchronized关键字更好的性能。”(我在网上找到的pdf第61页)没什么了。对我来说,这不是一本好书。