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 · 272 阅读 · 0 评论 -
ThreadLocal源码学习
ThreadLocal用途:声明式事务,保证同一个connection 实例说明: Spring的声明式事务 在声明式事务中,有多个方法,想要保证在同一个事务,就需要每个方法拿到的connection是同一个。这几个方法在同一个线程中,把connection放到threadLocal这个线程对象里面,以后每一个取值,都是从这个线程对象中获取 ThreadLocal<String>...原创 2020-04-17 16:55:22 · 215 阅读 · 0 评论 -
AQS源码学习
AQS理解 (volatile)status 和 监控status的双向链表,每个链表里面有一个节点node,node里面装的是thread ReentryLock->FairSync/UnFairSync->AQS原创 2020-04-16 23:38:37 · 317 阅读 · 0 评论 -
多线程面试题汇总
题目一:实现两个线程,第一个线程往队列中添加10个数,第二个线程监控这个队列,当添加到第5个数时,第二个线程结束 实现一:wait/notify package com.example.demo; import java.util.ArrayList; import java.util.List; public class ProductConsumerTest { private s...原创 2020-04-16 21:36:59 · 370 阅读 · 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 · 300 阅读 · 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 · 333 阅读 · 0 评论 -
Atomic及数字递增的几种实现方式
AtomicInteger:采用CAS无锁模式(乐观锁) 我们实现对一个数字增加,有三种方法 1.AtomicInteger,CAS锁 2.Sychronized 整段方法加速 3.LongAdder 采用分段锁(分成多段,几个线程锁定一段,每一段都采用CAS锁,最后把所有值汇总),对线程数多的时候,有优势 ...原创 2020-04-16 09:55:58 · 649 阅读 · 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 · 270 阅读 · 0 评论 -
volatile理解
.保证线程可见性 (1)MESI (2)本质上使用CPU的缓存一致性协议 .禁止指令重排序(CPU) 指令重排序 (1)DCL单例 (2)Double check lock (3)Mgr06.java原创 2020-04-14 15:22:10 · 170 阅读 · 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 · 1321 阅读 · 0 评论 -
Java线程池使用及源码学习
Executor: 执行器接口,执行某项任务 (exec()方法) ExecutorService: 执行器的服务 (exec(), submit(runnable/callable) 方法) Callable: interface(call()方法,可以返回一个result) Runable: interface (run()方法,没有返回值) Executors: 工具类,操作Executo...原创 2020-03-29 23:55:23 · 218 阅读 · 0 评论 -
JAVA并发容器
1.对于map/set的选择使用 不加锁 HashMap TreeMap (红黑树) LinkedHashMap 加锁、并发小 HashTable Collections.sychronized 高并发 CurrentHashMap ConcurrentSkipListMap(带排序) 2.队列 不加锁 ArrayList LinkedList 加锁、并发小 Collections.synchro...原创 2020-03-29 22:43:23 · 244 阅读 · 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 · 227 阅读 · 0 评论 -
Java多线程基本知识
1.启动线程的三种方式 (1)继承Thread (2)实现runnable接口 (3)通过线程池ExecutorService原创 2020-03-29 16:47:09 · 125 阅读 · 0 评论
分享