与Java中的同步块相比,新的锁接口有什么优势?
与Java中的同步块相比,新的锁接口有什么优势?您需要实现一个高性能缓存,它允许多个读卡器而不是单个写入器保持完整性。您将如何实现它?锁的优点是与Java中的同步块相比,新的锁接口有什么优势?,java,Java,与Java中的同步块相比,新的锁接口有什么优势?您需要实现一个高性能缓存,它允许多个读卡器而不是单个写入器保持完整性。您将如何实现它?锁的优点是 有可能使他们公平 在等待锁对象时,可以使线程对中断作出响应 可以尝试获取锁,但如果无法获取锁,则会立即返回或在超时后返回 可以在不同的范围内以不同的顺序获取和释放锁 请注意,在及其子类中对此进行了解释 可以使用ConcurrentMap实现高性能缓存。您需要知道何时使用锁,何时使用同步块/方法 如果要创建简单的应用程序,请使用同步块。它避免了比赛
- 有可能使他们公平
- 在等待锁对象时,可以使线程对中断作出响应
- 可以尝试获取锁,但如果无法获取锁,则会立即返回或在超时后返回
- 可以在不同的范围内以不同的顺序获取和释放锁
可以使用ConcurrentMap实现高性能缓存。您需要知道何时使用锁,何时使用同步块/方法
- 如果要创建简单的应用程序,请使用同步块。它避免了比赛条件。但在避免比赛条件的同时,你可能会造成僵局
- 如果要创建严肃的应用程序,请使用锁。它还可以避免竞争条件,但也有避免死锁的好处
锁接口在多线程和并发编程中的主要优点是,它们提供了两个单独的读写锁,使您能够编写高性能数据结构,如ConcurrentHashMap和条件阻塞
一个线程只能锁定一次。同步块不提供任何等待队列的机制,在一个线程退出后,任何线程都可以获得锁。这可能会导致其他线程在很长一段时间内资源匮乏。这确实不是在同步锁和显式锁之间进行选择的好方法。一个严肃的应用程序可能很简单,使用锁显然也会像synchronized一样导致死锁。您可以中断一个线程等待一个普通的内在Java监视器
Lock
具有lockInterruptibly
功能,该功能允许线程在被阻止获取锁时被中断。@Tom:当然,您可以中断被阻止的线程等待内部监视器,但线程不会对中断作出响应。这就是我的意思:中断方法将被调用,但线程在获得锁之前无法中断自身,并且它可能永远处于这种状态。我改变了措辞,使其更加明确。关键点是目标线程处于thread.State.BLOCKED
而不是thread.State.WAITING
(或TIMED\u WAITING
)。Lock
并不是什么新鲜事,它从Java5开始就存在了,也就是从2004年开始