Synchronized 与Lock的不同之处

  1. 用法不一样。synchronized既可以加在方法上,也可以加载特定的代码块上,括号中表示需要锁的对象。而Lock需要显示地指定起始位置和终止位置。synchronzied是托管给jvm执行的,Lock锁定是通过代码实现的。

  2. 在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择。

  3. 锁的机制不一样。synchronized获得锁和释放的方式都是在块结构中,而且是自动释放锁。而Lock则需要开发人员手动去释放,并且必须在finally块中释放,否则会引起死锁问题的发生。

  4. Lock是一个接口,不是Java语言内置的;synchronized是Java语言的关键字,因此是内置特性。

  5. 采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后或者出现异常时,系统会自动让线程释放对锁的占用;而Lock在发生异常时,如果没有主动通unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;

  6. Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。Lock可以提高多个线程进行读操作的效率。

最新文章

  1. WebWorker的importScripts方法
  2. noi题库(noi.openjudge.cn) 1.9编程基础之顺序查找T06——T15
  3. asp.net MVC SignalR 与数据库 实时同步显示
  4. 配置rc.local开机自启动文件的疑问
  5. 20145227《Java程序设计》课程总结
  6. windows下安装laravel简单步骤以及碰到的问题
  7. Eclipse小技巧<一>
  8. android3.2以上切屏禁止onCreate()
  9. [jQuery编程挑战]008 生成逗号分隔数字
  10. lucene3.6笔记添加搜索功能
  11. [C#参考]主线程和子线程之间的参数传递
  12. Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序
  13. MicroPython开发板:TPYBoard v102 播放音乐实例
  14. ping通windows下虚拟机上的linux系统
  15. 【转】【机器学习】R 正则化函数 scale
  16. 面试 5:手写 Java 的 pow() 实现
  17. Mybatis的延迟加载和缓存
  18. AnyConnect无法与指定的安全网关建立连接(转)
  19. Codeforces 994F Compute Power 二分+DP
  20. C#开发者工具网

热门文章

  1. 03-树2 List Leaves (25 分)
  2. Maven 打包报错,log4j版本导致
  3. IDEA中设置自动build-改动代码,不用重启工程,刷新页面即可
  4. ubuntu之路——day15.2 只用python的numpy在底层检验正则化对模型的影响
  5. Single Cell Genomics Day: A Practical Workshop
  6. 如何连接到远程windows服务器
  7. Python高级笔记(十一)装饰器【面试】
  8. oracle plsql 异常
  9. PAT 甲级 1075 PAT Judge (25分)(较简单,注意细节)
  10. python:使用Djangorestframework编写post和get接口