美文网首页
Java中的锁

Java中的锁

作者: CoderZzbJohn | 来源:发表于2019-01-23 14:28 被阅读0次
    image.png

    1.是否需要锁住资源
    1.1需要锁住,悲观锁。CAS
    1.2不需要锁住,乐观锁。

    2.获取锁失败时,线程是否需要阻塞。
    2.1阻塞。
    2.2自旋。
    1.自旋锁。
    2.适应性自旋锁。

    3.竞争同步资源时的流程状态。
    3.1无锁。CAS。不锁住资源,多线程中只有一个线程能成功修改资源,其他线程重试等待。
    3.2偏向锁。
    3.3轻量级锁。自旋等待CAS。
    3.4重量级锁。阻塞等待。

    4.竞争锁时是否需要排队。
    4.1公平锁。 公平锁时维护了线程排队的队列。先到的先排队,优先获得锁资源。
    4.2非公平锁。某个线程刚过来,首先尝试能否直接获得锁,如果获得锁了则不需要阻塞等待,而是直接执行。如果没有获取到锁,则进入队列排队,只有队列中的第一个线程有机会获取到锁。

    线程在获得锁的过程中,需要等待唤醒。这需要cpu唤醒阻塞线程消耗时间。直接获取了锁,则减少了需要被唤醒的线程数,节省了系统资源。缺点是可能会造成其他线程长时间等待。

    5.多线程是否可以共享一把锁。
    5.1共享锁。
    5.2排他锁。

    相关文章

      网友评论

          本文标题:Java中的锁

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