并发
技术翟12138
一个刚开始搞开发的小辣鸡
展开
-
ThreadLocal源码解析
ThreadLocal是什么 threadLocal是一个线程内部的存储类,可以在线程执行中存储数据,通常情况下我们创建的变量每一个线程都可以访问,而ThreadLocal则实现了线程的隔离性,保证了存储的数据只有当前线程可以访问得到 ThreadLocal使用场景 在Java的多线程编程中,为保证多个线程对共享变量的安全访问,通常会使用synchronized来保证同一时刻只有一个线程对共享变量进行操作。这种情况下可以将类变量放到ThreadLocal类型的对象中,使变量在每个线程中都有独立拷贝,不会出现原创 2020-07-17 10:59:45 · 173 阅读 · 0 评论 -
ReenTrantLock源码浅析
ReenTrantLock是什么 ReenTrantLock是juc包下的一个经典的互斥锁,也是 可重入锁(即当前线程在已经获取改锁后重复执行获取锁操作时不会引起死锁,并且不需要执行获取锁的操作),ReenTrantLock是基于AQS来实现的(PS:注意是基于不是继承,看到网上有的同学会说发现ReentrantLock并没有继承AQS有所疑问),如果有对AQS不了解的同学可以查看我之前的文章浅析AQS(1)—独占锁以及共享锁的实现以及浅析AQS (二)–condition的实现, 首先ReenTrantL原创 2020-07-15 17:35:50 · 148 阅读 · 0 评论 -
浅析AQS (二)--condition的实现
在前一章节中,我们简单分析过aqs中加锁以及阻塞的流程,这一章我们来分析一下condition条件阻塞工具的实现 什么是condition condition是作为条件阻塞器,通过调用await,signal和signalAll方法来阻塞和唤醒线程,可以横向对比的是Object对象的wait,notify以及notifyAll方法,值得注意的是,与Object的wait需要跟synchronized结合使用一样,condition也需要跟锁结合使用,比如ReenTrantLock中的newCondition原创 2020-07-14 08:37:21 · 333 阅读 · 0 评论 -
AQS加锁流程浅析
什么是AQS 所谓AQS,指的是AbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、ReentrantReadWriteLock,CountDownLatch等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。 AQS具体的实现方式为通过维护一个state变量,通过调用对应实现的方法来操作state并且根据state的状态来判断是否需要加锁,原创 2020-07-10 09:13:07 · 547 阅读 · 0 评论