JUC
锁、容器、线程池相关内容
BorisCao
这个作者很懒,什么都没留下…
展开
-
wait/notify理解
1.wait和notify必须和synchronized一起使用2.wait和notify是调用锁定对象的wait方法和notify方法3.wait:当前线程进入等待状态,释放锁4.notify:唤醒在这个对象上等待的一个线程5.notifyall:唤醒在这个对象上等待的所有线程...原创 2020-04-17 23:16:10 · 204 阅读 · 0 评论 -
ThreadLocal源码学习
ThreadLocal用途:声明式事务,保证同一个connection实例说明: Spring的声明式事务在声明式事务中,有多个方法,想要保证在同一个事务,就需要每个方法拿到的connection是同一个。这几个方法在同一个线程中,把connection放到threadLocal这个线程对象里面,以后每一个取值,都是从这个线程对象中获取 ThreadLocal<String>...原创 2020-04-17 16:55:22 · 160 阅读 · 0 评论 -
AQS源码学习
AQS理解(volatile)status 和 监控status的双向链表,每个链表里面有一个节点node,node里面装的是threadReentryLock->FairSync/UnFairSync->AQS原创 2020-04-16 23:38:37 · 229 阅读 · 0 评论 -
多线程面试题汇总
题目一:实现两个线程,第一个线程往队列中添加10个数,第二个线程监控这个队列,当添加到第5个数时,第二个线程结束实现一:wait/notifypackage com.example.demo;import java.util.ArrayList;import java.util.List;public class ProductConsumerTest { private s...原创 2020-04-16 21:36:59 · 310 阅读 · 0 评论 -
CountDownLatch 、ReentryLock、CyclicBarrier 、ReadWriteLock 、Semaphore、Exchanger、LockSupport
CountDownLatch:又叫门栓,初始化设置一个值,当这个值等于0时,是否锁 private void countDownLatch(){ CountDownLatch countDownLatch = new CountDownLatch(1); try { countDownLatch.await();//加锁 } ca...原创 2020-04-16 11:25:25 · 232 阅读 · 1 评论 -
ReentryLock vs Synchronized
sychronized: 可重入锁,一个线程锁定后,这个线程可以重新进入这个方法sychronized锁可以重入public class T{ private sychronized void m1(){ m2(); } private sychronized void m2(){ } //同一个线程,锁可以重入; 非同一个线程,锁不能重入 public static...原创 2020-04-16 10:45:20 · 295 阅读 · 0 评论 -
Atomic及数字递增的几种实现方式
AtomicInteger:采用CAS无锁模式(乐观锁)我们实现对一个数字增加,有三种方法1.AtomicInteger,CAS锁2.Sychronized 整段方法加速3.LongAdder 采用分段锁(分成多段,几个线程锁定一段,每一段都采用CAS锁,最后把所有值汇总),对线程数多的时候,有优势...原创 2020-04-16 09:55:58 · 570 阅读 · 0 评论 -
CAS(无锁优化 自旋)
CAS : Compare and swap( V,Expected,NewValue)cas有点像自旋锁,在初始阶段不会上锁,只有在具体操作时,才去判断.CPU原语支持if V == E V = NEW ELSE try again or fail//CPU原语保证在判断值相等和赋值之间是不会被打断的原理: 哪期望值和原来的值比较,如果相同,就可以更值;否则try ...原创 2020-04-14 17:57:13 · 210 阅读 · 0 评论 -
volatile理解
.保证线程可见性(1)MESI(2)本质上使用CPU的缓存一致性协议.禁止指令重排序(CPU)指令重排序(1)DCL单例(2)Double check lock(3)Mgr06.java原创 2020-04-14 15:22:10 · 116 阅读 · 0 评论 -
Synchronized使用的各种案例
synchronized: 锁定对象(在堆内存中),即保证了原子性又保证了可见性实例一、sycnchronized锁定某个对象//hotspot是这样实现的,在一个对象的头64位,拿出2位来记录这个对象是否被锁定(mark word) private int count = 10; Object o = new Object(); public static void m...原创 2020-04-14 12:40:18 · 1200 阅读 · 0 评论 -
Java线程池使用及源码学习
Executor: 执行器接口,执行某项任务 (exec()方法)ExecutorService: 执行器的服务 (exec(), submit(runnable/callable) 方法)Callable: interface(call()方法,可以返回一个result)Runable: interface (run()方法,没有返回值)Executors: 工具类,操作Executo...原创 2020-03-29 23:55:23 · 161 阅读 · 0 评论 -
JAVA并发容器
1.对于map/set的选择使用不加锁HashMapTreeMap (红黑树)LinkedHashMap加锁、并发小HashTableCollections.sychronized高并发CurrentHashMapConcurrentSkipListMap(带排序)2.队列不加锁ArrayListLinkedList加锁、并发小Collections.synchro...原创 2020-03-29 22:43:23 · 174 阅读 · 0 评论 -
JAVA锁之悲观锁和乐观锁
悲观锁: 独占锁即悲观锁,例如sychnorized,实现lock接口乐观锁:即无锁,每次不加锁即假定没有冲突去完成某项操作.CAS实现,例如: AutoInteger等CAS (Compare and Swap)比较并交换: 有三个值,内存当前值V,旧的预期值A,要更新的值B; V 和A 相同,则就修改为B,否则什么都不做。CAS是原子性的,是基于CPU命令的CAS指令...原创 2020-03-29 20:04:20 · 184 阅读 · 0 评论 -
Java多线程基本知识
1.启动线程的三种方式(1)继承Thread (2)实现runnable接口 (3)通过线程池ExecutorService原创 2020-03-29 16:47:09 · 89 阅读 · 0 评论