美文网首页
ReentrantLock和监视器锁的选择

ReentrantLock和监视器锁的选择

作者: wusp | 来源:发表于2017-06-19 15:01 被阅读26次

    在Java多线程编程中,我们经常过加锁的机制来保证线程同步。以Synchronized关键字为实现方式的监视器锁和ReentrantLock的多线程API是我们经常使用的两种方式,那么如何在两者之间进行选择呢?

    ReentrantLock的API实现了以下这些特性,而这些特性使用监视器锁实现起来比较复杂
    定时锁:索取锁的时候可以设定一个超时时间,如果超过这个时间还没索取到锁,则不会继续堵塞而是放弃此次任务。
    可中断锁:能够在获得锁的同时保持对中断的响应。
    锁轮询:只有在锁可以获取的情况下才获取锁,否则返回false给调用者。
    非块结构锁:在一个方法中加锁,在另一个方法中释放锁。
    公平锁:多个线程在等待同一个锁时,必须按照申请锁的时间顺序排队等待,而非公平锁则不保证这点,在锁释放时,任何一个等待锁的线程都有机会获得锁。
    多条件绑定:使用一个锁就可以同多个条件进行关联,而不是使用多个锁。

    很明显,当在编程当中碰到以上这些需求点时,优先使用ReentrantLock API就值得重点考虑。但这并不是说监视器锁并不能实现这些需求,毕竟API只是简化了编程的难度。

    相关文章

      网友评论

          本文标题:ReentrantLock和监视器锁的选择

          本文链接:https://www.haomeiwen.com/subject/tlvgqxtx.html