欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 同步

程序员文章站 2022-07-02 15:46:32
本文主要记录java进行同步的方案及锁优化的方法,来自《深入理解jvm》 定义 线程安全:多线程访问一个对象时,不用考虑这些线程在运行时环境下的调度与交替执行,也不需要额外的同步或调用方进行任何协调操作,调用这个对象的行为都可以获得正确的结果。 同步方法 互斥 1、Synchronized 同一个线 ......

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

 

定义

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

 

同步方法

互斥

1、synchronized

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

2、reentrantlock:可重入锁

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

 

非阻塞同步

1、cas

2、无同步方案

(1)可重入代码

(2)线程本地存储

 

锁优化

1、自适应自旋锁

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

2、锁消除

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

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

cas + mark word实现;

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

 

concurrenthashmap : 使用分段加锁实现。