5

我正在阅读“Java Concurrency CookBook”。在那位作者提到使用 Lock 接口比使用synchronized关键字提供更多性能。有人能告诉我怎么做吗?使用堆栈帧或方法调用次数等术语。不介意,请帮我摆脱java并发概念。

4

2 回答 2

2

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

一个特定的Lock 实现是否实际上比synchronized一个有争议的点和实现依赖更快。Javadoc 中当然没有这样的声明。道格·利斯 (Doug Leas) 的书 [1] 一切开始的地方并没有声称我可以很快看到比“通常具有更好的性能”更强大。

[1]:Lea,Java 中的并发编程,第 2 版,Addison Wesley 2000。

于 2013-09-17T08:03:49.390 回答
0

1 与没有死锁问题的锁不同,同步是导致死锁问题的唯一罪魁祸首。

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

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

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

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

于 2019-10-28T16:49:48.630 回答