并发之父 生平不识Doug Lea,学懂并发也枉然 Java并发编程核心在于java.util.concurrent包而juc当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronizer简称 ...
分类:
其他好文 时间:
2021-02-15 12:08:25
阅读次数:
0
1 AQS state AQS 的关键 CAS Compare And Swap 修改 state Unsafe 使用 LockSupport 的 park()、unpark() 挂起和唤醒线程 同步队列 sync queue 条件队列 condition queue 等待队列 还有什么阻塞队列,看 ...
分类:
其他好文 时间:
2020-11-04 17:34:20
阅读次数:
14
同步框架AbstractQueuedSynchronizer Java并发编程核心在于java.concurrent.util包 而juc当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchron ...
分类:
其他好文 时间:
2020-07-18 19:45:38
阅读次数:
71
一、BlockingQueued BlockingQueued 队列使用 ReentrantLock 和 Condition(AQS实现)来实现的。Condition 只能用于独占模式。 条件队列中的节点永远不会被唤醒,一直阻塞者;要想唤醒,则需要把该节点放到CLH队列中,放入到CLH队列中才有机会 ...
分类:
其他好文 时间:
2020-06-20 19:41:21
阅读次数:
61
多线程的线程同步和锁 线程同步 当多个线程访问同一个对象,并且线程还想修改对象,这时候就需要 线程同步 ,线程同步其实就是一个等待机制,多个需要访问此对象的线程进入 对象的等待池 形成队列,等待前一个线程使用完毕,下一个线程再使用。 线程同步的形成条件:队列+锁 队列 线程排队。 锁_synchro ...
分类:
编程语言 时间:
2020-05-15 20:37:08
阅读次数:
79
CAS的概念: CAS的全称为Compare And Swap,直译就是比较交换。是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,其实现方式是基于硬件平台的汇编指令,在intel的CPU中,使用的是cmpxchg指令,就是说CAS是靠硬件实现的,从而在硬 ...
分类:
其他好文 时间:
2020-02-28 18:58:26
阅读次数:
72
经典笔试题: 1、自定义容器,提供新增元素(add)和获取元素数量(size)方法。2、启动两个线程。线程1向容器中新增10个数据。线程2监听容器元素数量,当容器元素数量为5时,线程2输出信息并终止。 package com.gaopeng.programming.test2; import jav ...
分类:
编程语言 时间:
2020-02-05 18:13:53
阅读次数:
86
AbstractQueuedSynchronizer简称为AQS,AQS是ReentrantLock、CountdownLatch、CycliBarrier等并发工具的原理/基础,所以了解AQS的原理对学习J.U.C包很重要。 基本原理: 1.AQS中包含两种队列(FIFO),同步队列+条件队列,底 ...
分类:
编程语言 时间:
2019-12-19 19:27:05
阅读次数:
69
谈谈多线程 多线程真的是一个很宽的话题,可以聊一串东西线程安全、同步机制、锁、线程运行状态、CAS原子操作、线程池、甚至是JMM、内存可见性等。 而在日常coding中更多地关注是创建线程池提交多个任务执行,分析哪些数据结构被多个线程共享访问,在哪个方法上加锁?如果程序运行一段时间出问题,可能jst ...
分类:
编程语言 时间:
2019-12-14 17:38:52
阅读次数:
103
1、ArrayBlockingQueue利用了ReentrantLock来保证线程的安全性,针对队列的修改都需要加全局锁。
2、ArrayBlockingQueue是有界的,且在初始时指定队列大小。
3、ArrayBlockingQueue的内部数组其实是一种环形结构。
分类:
编程语言 时间:
2019-07-04 22:44:48
阅读次数:
167