Fork me on GitHub

同步

同步是一种并发操作机制,用来预防、避免对资源不适当的交替使用(一般称为竞争),保障交替使用资源的安全。 Java使用线程来实现并发。互斥是同步的特殊情况,即同一时间最多允许一个线程访问受保护的代码或者数据。 HotSpot VM使用监视器(monitor)对象来保障线程运行代码之间的互斥。
HotSpot VM吸收了非竞争和竞争性同步操作的最先进技术,极大的提高了同步性能。
非竞争性同步,指的是同一个线程里在其他无归属monitor对象(未被任何线程拥有的对象)上的同步操作,Java 5 HotSpot VM中引入了偏向锁,用于对象在其生命周期内最多只被一个线程锁住,一旦开启偏向锁,该线程不需要借助原子指令就可以对该对象进行锁定和解锁。
竞争性同步操作可以使用高级自适应自旋锁技术来改善吞吐量。
HotSpot VM内部表示Java对象的第一个字(Word),包含了Java对象的同步状态编码,通常称为标记字(Mark Word)。 为了节约空间,标记字会依据不同的状态复用存储空间。包含以下对象同步状态:
1. 中立:已解锁
2. 偏向:已锁定/已解锁且无共享
3. 栈锁:已锁定且共享,但非竞争,共享的意思是该标记指向锁对象在线程栈中的标记字副本。
4. 膨胀:已锁定/已解锁且共享和竞争。线程在monitor-enter或者wait()时被阻塞。该标记指向一个重型的object-monitor结构。


最新评论

    还没有人评论...

当当

友情链接

Powered by Python. Copyright © 2017.

鄂ICP备17010875号. All rights reserved.