synchronized实现的个人体会

2018-10-30  本文已影响9人  huangxiongbiao
1、synchronized同步关键字总述

jdk1.5之前 synchronized的同步依靠的是系统内核的互斥同步实现的。对于阻塞的实现需要在内核中完成线程的挂起和恢复。严重影响了同步的并发性能
在jdk1.6实现了很多锁优化技术。如自旋锁,锁消除,锁粗化,轻量锁,和偏向锁

2、简述自旋锁,锁消除,锁粗化,轻量锁,和偏向锁
(1)自旋锁

原理其实就是一个忙循环,循环等待。这种操作占用cpu时钟,在长时间阻塞中会影响计算机性能。所有jvm设置的是10个忙循环为获得锁会转入重量锁及互斥同步。忙循环次数可以自己用指令设置-XX:PreBlockSpin

(2)锁消除

锁消除jvm编译时,判断有些代码不需要同步的会自动去掉同步锁,以免造成浪费

(3)锁粗化

锁粗化 在一个循环内加锁循环加锁,jvm编译时能够将锁已到循环外避免锁重复

(4)轻量锁

轻量锁在没有并发竞争的时候使用,获取锁时将对象头部的锁标识设置为已锁定。如果有锁来竞争,先使用自旋锁等待。若在一定次数内未获得相关锁,在转入重量锁。尽可能的避免互斥锁的使用,影响并发性能

(5)偏向锁

第一次获取锁对象头设置为偏向锁状态,存入线程id。在无竞争情况下,后续进入该线程无需任何操作。在有线程来竞争时,取消偏向锁状态后续操作和轻量锁类似

上一篇 下一篇

猜你喜欢

热点阅读