1. 原始构成

    • Synchronized 是关键字,属于JVM层面,底层是通过 monitorenter 和 monitorexit 完成,依赖于 monitor 对象来完成。由于 wait/notify 方法也依赖于 monitor 对象,因此只有在同步块或方法中才能调用这些方法。
    • Lock 是 java.util.concurrent.locks.lock 包下的,是 api层面的锁。
  2. 使用方法
    • Synchronized 不需要用户手动释放锁,代码完成之后系统自动让线程释放锁
    • ReentrantLock 需要用户手动释放锁,没有手动释放可能导致死锁。
  3. 等待是否可以中断
    • Synchronized 不可中断,除非抛出异常或者正常运行完成
    • ReentrantLock 可以中断。一种是通过 tryLock(long timeout, TimeUnit unit),另一种是lockInterruptibly()放代码块中,调用interrupt()方法进行中断。
  4. 加锁是否公平
    • synchronized 是非公平锁
    • ReentrantLock 默认非公平锁,可以在构造方法传入 boolean 值,true 代表公平锁,false 代表非公平锁。
  5. 锁绑定多个 Condition
    • Synchronized 只有一个阻塞队列,只能随机唤醒一个线程或者唤醒全部线程。
    • ReentrantLock 用来实现分组唤醒,可以精确唤醒。

最新文章

  1. iOS Interface Builder:在.xib文件中加载另一个.xib文件
  2. Java Garbage Collection基础详解------Java 垃圾回收机制技术详解
  3. kali 虚拟机开启mysql:3306 供主机访问.
  4. 项目前端技术-learn
  5. ConfigParser---python
  6. Javascript:简单拖拽效果的实现
  7. 无法从带有索引像素格式的图像创建graphics对象(转)
  8. 傻瓜式破解linux--rootpassword
  9. 【Time系列四】查询各月份的日历
  10. VMware设置NAT网络
  11. 安装mongodb后启动报错libstdc++
  12. CISCO ACL配置
  13. echarts修改上下左右的边距
  14. exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
  15. Android View体系(五)从源码解析View的事件分发机制
  16. android.DataBindingUtil
  17. PySide图形界面开发(一)
  18. 使用Linux工作之Fedora KDE
  19. 斐波拉契数列(用JavaScript和Python实现)
  20. spring mvc 工作原理

热门文章

  1. XFS文件系统的备份与恢复
  2. commonJS、AMD和CMD之间的区别
  3. L12 Transformer
  4. 杭电1080 J - Human Gene Functions
  5. 14.移动端图片浏览组件 react-wx-images-viewer
  6. pytorch seq2seq模型中加入teacher_forcing机制
  7. Centos8安装docker-compose
  8. thinkphp5 不使用form,用input+ajax异步上传图片
  9. 2019-2020-1 20199310《Linux内核原理与分析》第一周作业
  10. Scala教程之:面向对象的scala