随笔分类 -  JUC(学习笔记)

摘要:ReentrantLock原理及源码阅读 1、ReentrantLock介绍 ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取到该锁,其他线程获取该锁的线程将会被阻塞而被放入该锁的AQS阻塞队列里面。 ReentrantLock最终还是使用AQS来实现的,并且根据参数来决定其内 阅读全文
posted @ 2022-05-30 14:06 YoungerWb 阅读(35) 评论(0) 推荐(0) 编辑
摘要:抽象同步队列AQS源码学习 1、AQS类结构剖析 static final class Node { /** Marker to indicate a node is waiting in shared mode */ static final Node SHARED = new Node(); / 阅读全文
posted @ 2022-05-25 20:47 YoungerWb 阅读(27) 评论(0) 推荐(0) 编辑
摘要:写时复制,CopyOnWriteArrayList源码剖析 1、CopyOnWriteArrayList介绍 CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。 每个 CopyOnWri 阅读全文
posted @ 2022-05-25 15:47 YoungerWb 阅读(52) 评论(0) 推荐(0) 编辑
摘要:CAS操作及原子类的使用 1、CAS操作 在java中,加锁可以解决一定的并发问题,但是锁有一个不好的问题就是当一个线程没有获取到锁的时候就会被阻塞挂起,这会导致线程上下文的切换和重新调度开销。Java提供了非阻塞的volatile关键字来解决共享变量的可见性问题,这在一定程度上弥补了锁带来的开销问 阅读全文
posted @ 2022-05-25 11:20 YoungerWb 阅读(271) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal理解及使用 ​ 多线程访问同一个共享变量时特别容易出现并发问题,特别是在多个线程需要对一个共享变量进行写入时。为了保证线程安全,一般使用者在访问共享变量时需要进行适当的同步。 ​ 同步的措施一般是加锁,这就需要使用者对锁有一定的了解,因此可以使用ThreadLocal,当创建一 阅读全文
posted @ 2022-05-24 16:42 YoungerWb 阅读(52) 评论(0) 推荐(0) 编辑
摘要:什么是JMM? 在了解JMM之前,先了解下为什么提出了JMM。 CPU缓存,在多核CPU的情况下,带来了可见性问题 操作系统对当前执行线程的切换,带来了原子性问题 编译器指令重排优化,带来了有序性问题。 JMM 即Java内存模型,也就是Java Memory Model,简称JMM,本身是一种抽象 阅读全文
posted @ 2022-04-16 21:16 YoungerWb 阅读(274) 评论(0) 推荐(0) 编辑
摘要:Volatile关键字 使用锁的方式可以解决共享变量内存可见性问题,但是使用锁太笨重,因为它会带来线程上下文的切换开销。对于解决内存可见性问题,Java还提供了一种弱形式的同步,就是Volatile关键字。该关键字可以确保对一个变量的更新对其他线程马上可见。当一个变量被声明为volatile时,线程 阅读全文
posted @ 2022-04-16 20:39 YoungerWb 阅读(71) 评论(0) 推荐(0) 编辑
摘要:import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class boo 阅读全文
posted @ 2022-04-01 10:29 YoungerWb 阅读(67) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示