新的Lock接口优于Java中的synchronized块有什么优势?

时间:2011-11-06 08:07:36

标签: java

新的Lock接口优于Java中的synchronized块有什么优势?您需要实现一个高性能缓存,它允许多个读者但单个编写者保持完整性,您将如何实现它?

4 个答案:

答案 0 :(得分:11)

锁的优点是

  • 可以使它们公平
  • 可以在等待Lock对象时使线程响应中断。
  • 可以尝试获取锁定,但如果无法获取锁定,则立即返回或超时后
  • 可以在不同的范围内以不同的顺序获取和释放锁

请注意,这在javadoc of Lock及其子类中进行了解释。

可以使用ConcurrentMap实现高性能缓存。

答案 1 :(得分:1)

锁定接口相对于同步的各种优点在下面列出

  1. 与锁不同,同步是导致死锁问题的唯一元凶,而锁没有死锁问题。

  2. 在同步中,我们不知道在前一个线程释放锁后线程将在多少时间后才有机会。这可能会导致饥饿问题,而在锁的情况下,我们有其实现的类可重入锁,该锁具有其构造函数之一,可让您将fairness属性作为其参数之一,让最长的等待线程有机会获得该锁。 p>

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

  4. 没有用于检查多少线程在等待特定锁的api,而使用锁接口实现类则可以 ReentrantLock方法。

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

答案 2 :(得分:0)

多线程和并发编程上的锁接口的主要优点是,它们提供了两个单独的读写锁,使您可以编写高性能数据结构,例如ConcurrentHashMap和条件阻塞。

一个线程只能获得一次锁定。同步块不提供任何等待队列的机制,并且在一个线程退出后,任何线程都可以获取锁定。这可能导致很长一段时间内其他线程的资源匮乏。

答案 3 :(得分:-4)

您需要知道何时使用Lock以及何时使用同步块/方法。

  • 如果要创建简单的应用程序,请使用“已同步”块。它避免了竞争条件。但是在避免竞争条件的同时,您可能会导致死锁。

  • 如果要创建严肃的应用程序,请使用锁定。它也避免了竞争条件,但你也有避免死锁的好处。