
多线程
文章平均质量分 79
包括多线程基础,多线程理论
全栈黎明
以代码为生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分布式集群如何保证线程安全
分布式环境如何保证线程安全?原创 2024-01-30 20:53:10 · 317 阅读 · 0 评论 -
多线程笔记
线程池 public static void main(String[] args) throws ExecutionException { //线程池创建线程 ExecutorService es = Executors.newFixedThreadPool(2); // MyThread t1 = new MyThread(); // MyThread t2 = new MyThread(); // MyThread t3 = n原创 2020-12-22 14:49:13 · 111 阅读 · 0 评论 -
ReentrantLock的公平锁解析
公平锁前置概念park和unpark多线程执行逻辑这里对AQS类做一个介绍公平锁源码分析深入分析公平锁的实现 前置概念 park和unpark unpark函数为线程提供“许可(permit)”,线程调用park函数则等待“许可”。 Thread thread = Thread.currentThread(); LockSupport.park(); //park()是不可重入的,如果连续调用两次park(),会发生线程阻塞 LockSupport.unpark(thr原创 2020-08-15 11:29:27 · 267 阅读 · 0 评论 -
线程池
线程池创建线程池的方法线程池的作用5个创建方法线程池应用举例高级的创建线程池的方法线程池的代码实践线程池银行举例 创建线程池的方法 线程池的作用 线程复用 控制最大并发度 管理线程 5个创建方法 //看方法有五种线程池 ExecutorService threadPool = Executors.newFixedThreadPool(5);//一池5个处理线程 ExecutorService singleThreadExecutor = Executors.newSi原创 2020-08-09 21:00:30 · 144 阅读 · 0 评论 -
生产者消费者
生产者消费者问题注意点synchronized版阻塞队列版 注意点 多线程操作资源类,牢记三步走: 判断 干活 唤醒 synchronized版 //A : num + 1 //B : num - 1 public class A { public static void main(String[] args) { Data data = new Data(); new Thread(() -> { for (int i = 0原创 2020-08-08 21:54:40 · 116 阅读 · 0 评论 -
synchronized和lock的区别
synchronized和lock的区别1. synchronized是jvm层面的,lock是API层面的锁2. synchronized不需要解锁3. 等待是否可中断4. synchronized是非公平锁5. 锁绑定多个条件Condition(精准唤醒)精准唤醒的Condition代码举例 1. synchronized是jvm层面的,lock是API层面的锁 使用如下代码验证 public class LockAndSynchronizedDemo { public static vo原创 2020-08-08 21:48:39 · 513 阅读 · 1 评论 -
阻塞队列
阻塞队列的使用阻塞队列的简介jdk里面的其中阻塞队列的实现阻塞队列的四组方法ArrayBlockingQueue的代码验证SynchronousQueue的代码验证 阻塞队列的简介 阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除的附加方法的队列。 1)阻塞插入:当队列满后,队列会阻塞(拒绝)插入元素,直到队列不满。 2)阻塞移除:当队列为空时,队列会阻塞(拒绝)移除元素,直到队列里有元素。 jdk里面的其中阻塞队列的实现 ArrayBlockingQueue:由数组结构组成的原创 2020-08-08 21:22:26 · 130 阅读 · 0 评论 -
读写锁
读写锁简介互斥条件代码验证 简介 本质是提高线程并发的手段,java里面通过ReentrantReadWriteLock实现 可以实现对同一个资源类的读写分离 互斥条件 读 - 读 不互斥 读 - 写 互斥 写 - 写 互斥 代码验证 class MyCache{ //资源类 private volatile Map<String,Object> map = new HashMap<>(); //private Lock lock = new Reentra原创 2020-08-06 18:15:40 · 104 阅读 · 0 评论 -
自旋锁
自旋锁自旋锁简介代码实现自旋锁juc中自旋锁源码 自旋锁简介 是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU 代码实现自旋锁 public class SpinLock { //原子引用线程 AtomicReference<Thread> atomicReference = new AtomicReference<Thread>(); public static void m原创 2020-08-06 18:05:51 · 109 阅读 · 0 评论 -
CAS
CASCAS你知道吗?CAS是什么?CAS底层原理?如果知道,谈谈你对unsafe的理解CAS缺点原子更新引用知道吗? 如何规避ABA问题?原子引用解决ABA问题 CAS你知道吗? CAS是什么? 比较并交换 CAS底层原理?如果知道,谈谈你对unsafe的理解 自旋锁,UNSafe cas是一条CPU并发原语,判断内存某个位置的是否为预期值,如果是则更改为新的值这个过程是原子的 CAS缺点 循环时间长,开销大(如果CAS失败,会一直进行尝试,如果CAS长时间不成功,开销很大) 只能保证一个共享变量的原创 2020-08-04 18:37:41 · 168 阅读 · 0 评论