区别如下:
1. lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现;(具体实现上的区别在《Java虚拟机》中有讲解底层的CAS不同,以前有读过现在又遗忘了。)
2. synchronized在发生异常时候会自动释放占有的锁,因此不会出现死锁;而lock发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。(所以最好将同步代码块用try catch包起来,finally中写入unlock,避免死锁的发生。)
3. lock等待锁过程中可以用interrupt来终端等待,而synchronized只能等待锁的释放,不能响应中断;
4. lock可以通过trylock来知道有没有获取锁,而synchronized不能;
5. Lock可以提高多个线程进行读操作的效率。(可以通过readwritelock实现读写分离)

转载于:https://www.cnblogs.com/yankang/p/6399017.html

lock和synchronized的同步区别与选择相关推荐

  1. Java同步锁——lock与synchronized 的区别【转】

    在网上看来很多关于同步锁的博文,记录下来方便以后阅读 一.Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchroni ...

  2. lock与synchronized锁有什么区别?它们的底层实现原理是什么?

    一.共同点 Lock和synchronized都是本地锁,它们都可以通过上锁解决多个线程访问共享资源的问题,并且synchronized和lock锁都支持可重入锁机制,即同一个线程在已经获得锁的情况下 ...

  3. Lock与synchronized测试区别

    原文:http://www.cnblogs.com/nsw2018/p/5821738.html 1.ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票 ...

  4. Lock与synchronized 的区别

    1.ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O ...

  5. Lock和synchronized的选择

    学习资源:http://www.cnblogs.com/dolphin0520/p/3923167.html 一.java.util.concurrent.locks包下常用的类 1.Lock pub ...

  6. lock和synchronized的区别

    lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现:(具体实现上的区别在<Java虚拟机>中有讲解底层的CAS不同,以前有读过现 ...

  7. Lock与Synchronized区别

    先说结论,后面详解 synchronized是关键字,Lock是接口; synchronized是隐式的加锁,lock是显式的加锁; synchronized可以作用于方法上,lock只能作用于方法块 ...

  8. Lock锁与synchronized锁的区别

    Lock锁与synchronized锁的区别 1.synchronized锁是可以帮助我们自动开锁和关闭锁 2.Lock锁,我们最常用的是ReentrantLock重入锁,需要我们手动的开锁和手动关锁 ...

  9. Lock和synchronized比较详解

    原文:http://www.cnblogs.com/handsomeye/p/5999362.html 今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉 ...

最新文章

  1. 接口隔离原则_设计模式六大原则
  2. node2vec: Scalable Feature Learning for networks
  3. Constructing Roads POJ - 2421 (最小生成树)
  4. Anaconda下安装OpenCV和Tensorflow(最简洁高效的方法)
  5. ajax发送数据时的contentType
  6. 关于c#静态构造函数
  7. android R编译OTA时报“ExternalError: Invalid ro.product.property_source_order”解决方法
  8. 牛顿迭代法求一个数的平方根
  9. Python利用结巴分词进行中文分词
  10. 研究了那么多内容后,我们打算推荐这些公众号给你
  11. 海豚湾--纪录日本人如何杀戮海豚的
  12. 格兰杰因果 Granger causality
  13. Java序列化 ObjectInputStream源码解析
  14. android 文件名编码,安卓删除纯乱码文件名的文件
  15. 淘宝/天猫官方商品/订单订单API接口
  16. Node.js中的child_process模块详解
  17. AMA专题: 深入解读Read2N三大创新, 全面启动市场引擎
  18. 华为从服务器获取安装包信息失败,华为系统恢复获取安装包信息失败
  19. ES6:字符串的扩展及新增方法
  20. 加速计陀螺仪6轴数据融合算法解析

热门文章

  1. webviewjavascriptbridge android ios,js与ios交互使用WebViewJavascriptBridge如何写多个函数
  2. linux服务器用哪个面板好,Linux服务器管理面板哪家比较好用?
  3. python提取包含特定字符串的行_python语言----txt中搜索特定字符串所在行
  4. Linux/Unix/Mac 系统GIT密码存储
  5. android程序到处apk,导出已安装到手机中程序的apk文件
  6. mysql 检查点_my05_mysql检查点简述
  7. 微机原理——总线和时序
  8. python 抓取网页链接_从Python中的网页抓取链接
  9. Java IdentityHashMap isEmpty()方法与示例
  10. 常见的Java审计代码函数关键字_转载:Java代码审计汇总系列(一)——SQL注入