
Java多线程与并发编程
文章平均质量分 77
黎梓鹏
通过 Java 去认识计算机的世界。。。
展开
-
实战篇--多线程实现组件加载
1. 场景介绍 启动一个服务之前,需要先加载多个组件,等到多个组件都加载完毕后,该服务的主线程方能正常运行。2. 技术点2.1 CountDownLatchCountDownLatch 使 主线程 在 count 个线程执行完毕之前阻塞在一个地方CountDownLatch的底层支持是AQS,当使用countDown()方法时,其实使用了tryReleaseShared方法以 CAS 的操作来减少 state,直至 state 为 0 。当调用 await() 方法的时候,如果 state原创 2021-08-15 15:21:30 · 341 阅读 · 0 评论 -
生产者消费者模式的多种实现
生产者消费者模式的多种实现1. synchronized方式1.1 方法简介Object.wait() 使当前的线程进入到等待状态【进入到等待队列】Object.notifyAll() 唤醒等待中的全部线程Object.notify() 随机唤醒一个线程1.2 代码package thread.consumer;import java.util.ArrayList;import java.util.List;/** * 消费者 */public class Consum原创 2021-07-22 18:24:34 · 182 阅读 · 0 评论 -
Lock、ReadWriteLock与Condition
Lock、ReadWriteLock与Condition1. 简介Lock 和 ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock。Lock 接口支持那些语义不同(重入、公平等)的锁规则,可以在非阻塞式结构的上下文(包括 hand-over-hand 和锁重排算法)中使用这些规则。主要的实现是 ReentrantLock。ReadWriteLock原创 2021-07-22 15:29:40 · 226 阅读 · 0 评论 -
synchronized详解
synchronized详解1. 简介解决多线程访问共享资源的同步性问题synchronized关键字保证被其修饰的方法或者代码块在任意时刻只能有一个线程在执行在 Java 早期版本中,synchronized 属于 重量级锁因为监视器锁【monitor】依赖操作系统的Mutex Lock,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成原创 2021-07-22 11:10:15 · 133 阅读 · 0 评论 -
Java多线程与并发编程--ReentrantLock
Java多线程与并发编程–ReentrantLock1.1 底层原理public class ReentrantLock implements Lock, SerializableReentrantLock底层使用了 CAS + AQS队列1.1.1 CAS比较并交换,是一个原子操作【CPU指令】。当且仅当 当前值与预期值相等时,更新为新值。是乐观锁的实现机制在Java中,通过调用本地方法的方式实现CASCAS是整个JUC包的底层支持1.1.2 CAS的缺点ABA问题【原创 2021-07-20 13:47:42 · 105 阅读 · 0 评论