zoukankan      html  css  js  c++  java
  • 关于lock和synchronized的选择

    这里不介绍具体用法,介绍lock和synchronized的不同从而做出选择

    1.lock是一个接口,而synchronized是java中的一个关键字,synchronized是内置的语言实现。

    2.synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而lock在发生异常时,如果没有主动

    通过unlock()释放锁,则很可能造成死锁现象。因此使用lock时最好用到try,catch并且在finally块中释放锁。

    3.lock可以让等待锁的线程相应中断(使用lock的实现类:ReentrantLock的lockInterruptibly()方法,用

    线程对象名+interrupt()中断线程的等待),而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够相应中断。

    4.通过lock可以知道有没有成功获取锁(用ReentrantLock的trylock()方法返回布尔值),而synchronized无法办到。

    5.lock可以提高多个线程进行读操作的效率,因为lock具有ReentrantReadWriteLock实现类的readLock()返回读锁,

    ReentrantReadWriteLock实现类的writeLock()返回写锁。

    综合分析:

    在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),

    此使lock的性能远远优于synchronized,所以在具体使用时要根据具体情况选择。

  • 相关阅读:
    TS 3.1
    TS 3.1
    MDN 教程
    MDN 教程
    MDN 教程
    MDN 教程
    MDN 教程
    MDN 教程
    cookie会话技术
    数据库语法-1
  • 原文地址:https://www.cnblogs.com/ITDreamer/p/10834618.html
Copyright © 2011-2022 走看看