Just Do It
学妹要我教她 JMM 学妹要我教她 JMM
JMM 内存模型为什么需要内存模型? 我们知道 CPU 的运算速度是很快的,与内存也有几个数量级上的差距,所以一般现代计算机系统都会在内存与 CPU 之间加入一层或多层读写速度尽可能接近 CPU 运算速度的高速缓存来作为缓冲。 将运算需要使
2022-06-04
吊打面试官之 Java 线程池详解 吊打面试官之 Java 线程池详解
吊打面试官之 Java 线程池详解一、线程池是什么线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降
2022-06-04
锁的内存语义 锁的内存语义
1、锁的释放-获取建立的happens-before关系锁是并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 下面是锁释放-获取的示例代码: class MonitorExample
2021-10-24
双重检查锁定与延迟初始化 双重检查锁定与延迟初始化
1、双重锁定的由来在 Java 程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题。比如,下面是非线程
2021-10-24
原子操作的实现原理 原子操作的实现原理
原子(atomic)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation) 意味“不可被中断的一个或一系列操作”。在多处理上实现原子操作就变得有点复杂。看看处理器和Java中是如何实现原子操作的。 1、术语定义
2021-10-24
final 域的内存语义 final 域的内存语义
1、final域的重排序规则对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 初次读一个包含final域的对象
2021-10-24
一文带你撸懂AQS、ReentrantLock原理及源码 一文带你撸懂AQS、ReentrantLock原理及源码
一、前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队
2021-10-24
学霸题:happens-before 学霸题:happens-before
为什么要有 happens-beforehappe-before 是 JMM 最核心的概念,对应 Java 程序员来说,理解 happens-before 是理解 JMM 的关键。 从 JMM 设计者的角度来看,可见性和有序性其实是互相矛
2021-10-24
还不会synchronized底层原理?我劝你耗子尾汁 还不会synchronized底层原理?我劝你耗子尾汁
一、常见面试题 什么是锁的升级和降级 什么是JVM里的偏向锁、轻量级锁、重量级锁 不同JDK里的Synchronized的实现 二、Synchronized的使用 代码块形式: // 这个括号中的对象可以是this,也可以是自定义的
2021-10-24
你会 volatile 底层原理?不要耍这样的小聪明 你会 volatile 底层原理?不要耍这样的小聪明
1、常见面试题 volatile关键字的作用是什么? volatile能保证原子性吗? 之前32位机器上共享的long和double变量的为什么要用volatile? i++为什么不能保证原子性? volatile是如何实现可见性的? v
2021-10-24