疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java 同步


 

 

 

 

本文主要记录java进行同步的方案及锁优化的方法,来自《深入理解jvm》

 

定义

线程安全:多线程访问一个对象时,不用考虑这些线程在运行时环境下的调度与交替执行,也不需要额外的同步或调用方进行任何协调操作,调用这个对象的行为都可以获得正确的结果。

 

同步方法

互斥

1、Synchronized

同一个线程可重入;会陷入内核,属于重量级锁;非公平锁

2、Reentrantlock:可重入锁

默认非公平,可设置;可中断;绑定多个条件;如果不用这些特性,提倡使用Synchronized

 

非阻塞同步

1、Cas

2、无同步方案

(1)可重入代码

(2)线程本地存储

 

锁优化

1、自适应自旋锁

不放弃cpu,忙循环。减少线程切换开销。

2、锁消除

3、锁粗化:防止循环内的加锁

4、轻量级锁:适用于同步无竞争

Cas + mark word实现;

偏向锁:无竞争情况下不加锁

 

ConcurrentHashMap : 使用分段加锁实现。