
JUC学习以及源码分析
文章平均质量分 82
Rolland_hero
总不能还没有努力过,就向生活妥协
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ThreadLocal的使用与原理解析
基本介绍从Java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。我们可以得知 ThreadLocal 的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。使用方法.原创 2021-12-21 17:21:08 · 782 阅读 · 1 评论 -
JDK8 currentHashMap 相关讲解
put方法public V put(K key, V value) {return putVal(key, value, false);}final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == null || value == null) throw new NullPointerException(); // 其中 spread 方法会综合高位低位, 具有更好的 hash 性 int hash = spread(原创 2021-12-20 17:38:18 · 1146 阅读 · 0 评论 -
LongAdder讲解
思维导图.png阿里巴巴开发手册.png对于Java项目中计数统计的一些需求,如果是 JDK8,推荐使用 LongAdder 对象,比 AtomicLong 性能更好(减少乐观锁的重试次数)在大多数项目及开源组件中,计数统计使用最多的仍然还是AtomicLong,虽然是阿里巴巴这样说,但是我们仍然要根据使用场景来决定是否使用LongAdder。今天主要是来讲讲LongAdder的实现原理,还是老方式,通过图文一步步解开LongAdder神秘的面纱,通过此篇文章你会了解到:...转载 2021-12-19 10:15:55 · 1884 阅读 · 0 评论 -
JUC学习笔记三共享模型之管程
共享带来的问题临界区 Critical Section一个程序运行多个线程本身是没有问题的 问题出在多个线程访问共享资源 多个线程读共享资源其实也没有问题 在多个线程对共享资源读写操作时发生指令交错,就会出现问题 一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区。就比如i++这个操作实际上的JVM指令有四条getstatic i // 获取静态变量i的值iconst_1 // 准备常量1iadd // 自增putstatic i // 将修改后的值存入静态变量i原创 2021-11-29 16:13:11 · 288 阅读 · 0 评论 -
JUC学习笔记一进程与线程
进程与线程的概念进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在 指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器 等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等) 线程 线程是操作系原创 2021-11-20 20:46:56 · 366 阅读 · 0 评论 -
Java线程的6种状态及切换
Java中线程的状态分为6种 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态。 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(re原创 2021-12-01 20:18:05 · 136 阅读 · 0 评论 -
Volatile实现原理以及应用附加相关面试题
volatile实现原理以及应用原创 2021-12-02 11:37:00 · 236 阅读 · 0 评论 -
CAS无锁编程详解
概述在面对并发的场景,我们要对共享的资源进行保护,方式一般有两种,一种是使用Synchronized对资源进行加锁,另外一种方式就是本文要介绍的使用CAS来对共享资源进行保护。CAS全称是Compare And Swap,意思是比较与交换。通过比较之前的值是否发生改变,来决定是否对共享资源进行修改,如果这个值变了,那就说明有其它线程已经修改过这个值了,则修改失败,返回false,如果值没变,那顺利修改并且返回trueCAS底层是调用了native本地函数库,调用的是c++编写的函数,通.原创 2021-12-02 20:34:50 · 654 阅读 · 0 评论 -
那就手写一个线程池玩一下吧
最近在学JUC,学到线程池,感觉简简单单调用API对线程池的理解不够透彻,于是我决定,手写一个线程池。 首先,要手写一个线程池,就需要了解线程池具体的概念,它实现了什么功能,具体的组件是什么。以大哥李写的Executors为参考,下面先对线程池做一个简单的介绍。 线程池顾名思义,是一个装线程的一个池子。它可以创建,销毁线程,并且给这些线程安排任务。线程池被设计出来肯定是为了解决一些技术问题。技术问题就是比如创建一个线程需要T1的时间,销毁一个线程需要T2的...原创 2021-12-12 22:01:28 · 309 阅读 · 0 评论 -
线程池源码解读以及相关面试题
目录线程池整体解读核心源码解读ThreadPoolExecutor的属性线程池的构造方法线程池的工作流程不同的线程池newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutor内部类WorkerWorker类的run方法Worker类中的getTask方法ThreadPoolExecutor的execute方法线程池整体解读 线程池是一个可以自动创建并且维护相关线程的一个...原创 2021-12-13 19:39:12 · 750 阅读 · 0 评论 -
AQS原理以及源码解读
AQS概述:全称是AbstractQueuedSynchronizer,是一个阻塞式锁和相关的同步器工具的框架特点:用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取 锁和释放锁 getState - 获取 state 状态 setState - 设置 state 状态 compareAndSetState - cas 机制设置 state 状态 独占模式是只有一个线程能够访问资源,而共享模式可以允许多个线程访问资源 提供了原创 2021-12-16 21:08:37 · 317 阅读 · 0 评论 -
ReentrantLock非公平锁实现原理解读
概述ReentrantLock基于AQS,在并发编程中可以实现公平锁和非公平锁来对共享资源进行同步,同时和synchronized一样,支持锁重入,除此之外,RenentrantLock更加灵活,支持实现更多丰富的功能。说到ReentrantLock根据它的中文名,翻译过来叫做,可重入锁。但是仅仅用可重入一个特性来描述ReentrantLock好像有点以偏概全,其公平锁,非公平锁的实现,以及condition的实现似乎都很重要。所以这也是编程人员命名的一个烦恼。 基于上...原创 2021-12-17 16:16:47 · 948 阅读 · 0 评论