1. 互斥性(Mutual Exclusion)

  • 定义:synchronized确保了同一时刻只有一个线程可以执行被其修饰的代码块或方法,即多个线程在访问共享资源时不会发生冲突。
  • 源码分析:在JVM中,synchronized的实现依赖于Java对象头中的Mark Word和Monitor对象。当一个线程尝试进入synchronized代码块时,JVM会检查Mark Word中的锁状态。如果锁状态为无锁,则JVM会将当前线程的ID写入Mark Word,并将锁状态设置为偏向锁或轻量级锁。如果锁已被其他线程持有,则当前线程会被阻塞,直到锁被释放。
  • 作用:通过互斥性,synchronized确保了共享资源在同一时间只被一个线程访问,避免了数据不一致的问题。

2. 可见性(Visibility)

  • 定义:synchronized保证了共享变量的修改对其他线程是可见的。
  • 源码分析:当一个线程释放锁时,JVM会将对共享变量的修改刷新到主内存中。其他线程在获取锁时会从主内存中重新读取该变量的值,从而确保了变量值的可见性。这种机制避免了线程之间由于缓存不一致而导致的数据问题。
  • 作用:可见性确保了线程之间对共享变量的修改是同步的,从而保证了数据的一致性。

3. 原子性(Atomic

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部