这里不介绍具体用法,介绍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,所以在具体使用时要根据具体情况选择。

最新文章

  1. dialog 模块化窗口
  2. Ubuntu搭建Note.Js 平台
  3. java Servlet小结
  4. python学习——将while循环改成函数
  5. 单位换算(格式化十进制数-B),获取时间工具类CommenUtil
  6. 首次安装Pycharm出现No Python interpreter selected解决方法
  7. 【Linux】/dev/null 2>&1 详解
  8. Python - KMP算法
  9. RPi 2B UART作为调试口或者普通串口
  10. yii2源码学习笔记(二十)
  11. 20.org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
  12. (中等) POJ 3280 Cheapest Palindrome,DP。
  13. Android基本控件和事件以及消息总结
  14. Map集合转成json数据
  15. MySQL高级知识(十四)——行锁
  16. windows上RSA密钥生成和使用
  17. 关于 while(1)和for(;;)效率问题的一点想法
  18. Unity3d实现幸运转盘
  19. Commons包详解
  20. Python 列表下标操作

热门文章

  1. Java PDF转换成图片并输出给前台展示
  2. 安装ORACLE服务出现Oracle Net Configuration Assistant 失败问题【我】
  3. C# Web Service 不使用服务引用直接调用方法(转)
  4. html测试页LODOP的内容反复进入打印设计
  5. ztree通过id获取节点对象
  6. git取消追踪本地某个文件
  7. Ubuntu12.10添加matlab启动器
  8. SpringCloud用Zookeeper做服务注册与发现中心代码实现
  9. LeetCode 718. 最长重复子数组(Maximum Length of Repeated Subarray)
  10. 025 Android 带进度条的对话框(ProgressDialog)