
JUC
文章平均质量分 96
IT_datouer
这个作者很懒,什么都没留下…
展开
-
全面解析ThreadLocal
ThreadLocal全面解析 1. ThreadLocal介绍 1.1 官方介绍 从Java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。 我们可以得知 ThreadLocal 的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一原创 2021-11-26 20:22:07 · 208 阅读 · 0 评论 -
共享模型之无锁
1. 问题提出 有如下需求,保证 account.withdraw 取款方法的线程安全 package cn.itcast; import java.util.ArrayList; import java.util.List; interface Account { // 获取余额 Integer getBalance(); // 取款 void withdraw(Integer amount); /** * 方法内会启动 1000 个线程,每个线程做 -10 元 的操作 * 如果初始余额为原创 2021-11-10 21:59:33 · 236 阅读 · 0 评论 -
共享模型之内存
目录1.1 JAVA内存模型1.2 可见性退不出的循环解决方法可见性 vs 原子性1.3 CPU缓存结构原理1.3.1 CPU 缓存结构1.3.2 CPU 缓存读1.3.3 CPU 缓存一致性1.3.4 内存屏障1.4 有序性1.4.1 指令级并行原理1. 名词2. 鱼罐头的故事3. 指令重排序优化4. 支持流水线的处理器5. SuperScalar 处理器1.4.2 诡异的结果1.4.3 volatile 原理1. 如何保证可见性2. 如何保证有序性3. double-checked locking 问题原创 2021-11-02 21:17:36 · 161 阅读 · 0 评论 -
共享模型之管程
1.1共享带来的问题 java的体现 两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗? static int counter = 0; public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(() -> { for (int i = 0; i < 5000; i++) { counter++; } },原创 2021-10-30 17:31:47 · 340 阅读 · 0 评论 -
JUC笔记
1.1进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器 等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等) 线程 一个进程之内可以分为一到多个线程。 一个线程就原创 2021-10-25 23:11:58 · 164 阅读 · 0 评论