新的Lock接口优于Java中的synchronized块有什么优势?您需要实现一个高性能缓存,它允许多个读者但单个编写者保持完整性,您将如何实现它?
答案 0 :(得分:11)
锁的优点是
请注意,这在javadoc of Lock及其子类中进行了解释。
可以使用ConcurrentMap实现高性能缓存。
答案 1 :(得分:1)
锁定接口相对于同步的各种优点在下面列出
与锁不同,同步是导致死锁问题的唯一元凶,而锁没有死锁问题。
在同步中,我们不知道在前一个线程释放锁后线程将在多少时间后才有机会。这可能会导致饥饿问题,而在锁的情况下,我们有其实现的类可重入锁,该锁具有其构造函数之一,可让您将fairness属性作为其参数之一,让最长的等待线程有机会获得该锁。 p>
在同步中,如果一个线程正在等待另一个线程,那么正在等待的线程将不会执行任何其他不需要锁访问的活动,但是通过锁接口,您可以使用trylock()方法可以尝试访问该锁,如果您没有获得该锁,则可以执行其他替代任务。这有助于提高应用程序的性能。
没有用于检查多少线程在等待特定锁的api,而使用锁接口实现类则可以 ReentrantLock方法。
使用锁接口的holdCount()方法可以更好地控制锁,而这种方法在同步中找不到。
答案 2 :(得分:0)
多线程和并发编程上的锁接口的主要优点是,它们提供了两个单独的读写锁,使您可以编写高性能数据结构,例如ConcurrentHashMap和条件阻塞。
一个线程只能获得一次锁定。同步块不提供任何等待队列的机制,并且在一个线程退出后,任何线程都可以获取锁定。这可能导致很长一段时间内其他线程的资源匮乏。
答案 3 :(得分:-4)
您需要知道何时使用Lock以及何时使用同步块/方法。
如果要创建简单的应用程序,请使用“已同步”块。它避免了竞争条件。但是在避免竞争条件的同时,您可能会导致死锁。
如果要创建严肃的应用程序,请使用锁定。它也避免了竞争条件,但你也有避免死锁的好处。