线程安全
OneTask
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【深入了解Java虚拟机 第十二章】Java内存模型
目录Java内存模型主内存与工作主存内存之间交互操作原子性、可见性和有序性先行发生原则(Happens-Before)物理计算机中的并发问题由于计算机的存储设备与处理器的运算速度有着几个数据量的差异,现代计算机系统不得不加入一层或者多层读写速度尽可能接近处理器运行速度的高速缓存(Cache)来作为内存与处理器之间的缓冲:将运算需要的数据复制到缓存中,让处理器运算能够快速开始,运算结束后将结果从缓存中同步刷新回主存,保证处理器运算不需要等待缓慢的内存读写。高速缓存的存在解决了处原创 2020-05-25 20:32:08 · 389 阅读 · 0 评论 -
【深入了解Java虚拟机 第十三章】锁优化-自旋锁和自适应自旋锁、锁消除、锁粗化、轻量级锁和偏向锁
自旋锁【Java 基础 21】Java语言中的线程安全和线程安全的实现方式中提到互斥同步主要面临的问题就是线程阻塞和唤醒带来的性能开销,挂起线程和恢复线程的操作都需要转入内核态完成,这对Java虚拟机的并发性能带来很大的压力,当共享数据的锁定状态只持续很短的一段时间,将其他线程挂起和恢复并不值得,因此虚拟机开发团队设计线程没有获取到锁不立即挂起,而是执行一个忙循环(自旋)等待获取锁。JDK 6之后默认开始自旋锁,可以使用-XX:UsingSpinning参数设置开启/关闭。自旋等待虽然避免了线程原创 2020-05-24 12:19:14 · 444 阅读 · 0 评论 -
【Java 基础 18】Java 集合
Java中的集合主要继承Collection和Map两个根接口,Collection又派生了List,Queue,Set三个子接口,因此Java集合主要分为四类:List,Queue,Set,Map List Queue Set 线程安全 非线程安全 线程安全 非线程安全 线程安全 非线程安全 CopyOnWriteArrayList ArrayList ArrayBlockingQueue原创 2020-05-09 19:30:51 · 325 阅读 · 0 评论 -
【Java 基础 12】Atomic
java.util.concurrent.Atomic包下定义了很多具有原子操作的类先看看Atomic包下常用的AtomicInteger类package java.util.concurrent.atomic;import java.lang.invoke.VarHandle;import java.util.function.IntBinaryOperator;import java.util.function.IntUnaryOperator;public class At原创 2020-05-09 01:14:20 · 405 阅读 · 0 评论 -
【Java 基础 11】ThreadLocal
源码package java.lang;import jdk.internal.misc.TerminatingThreadLocal;import java.lang.ref.*;import java.util.Objects;import java.util.concurrent.atomic.AtomicInteger;import java.util.function....原创 2020-05-07 23:19:42 · 490 阅读 · 0 评论 -
【Java 基础8】volatile 关键字
JMM中的可见性问题在多线程环境中,共享变量A(存储在主存)在每个线程的工作内存中有一份拷贝Bi,线程直接读写工作内存中的数据,不同的线程的工作内存中变量之间不可见,这样就可能存在一个问题:工作内存Bi与主内存A同步延迟现象带来的可见性问题Volatile修饰的变量特点1. 多线程之间缓存可见2. 禁止指令重排,保证数据的有序性/一致性Volatile 缓存可见性(...原创 2020-05-02 00:03:40 · 306 阅读 · 0 评论
分享