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
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » Synchronized的“特性保证”
发表评论 取消回复