
JUC并发工具
该分类专栏主要是谈谈juc中常用的并发工具类以及简单聊聊其实现原理
孟诸
coding
展开
-
JUC并发工具十一-阻塞队列
目录1 ArrayBlockingQueue使用及原理1.1 ArrayBlockingQueue使用1.2 核心方法概览1.2.1 add和offer1.2.2 带有超时时间的offer方法1.2.3 put方法1.2.4 remove和poll方法1.2.5 带有超时的poll方法1.2.6 take方法2 LinkedBlockingQueue使用及原理2.1 LinkedBlockingQueue的使用2.2 核心方法概览2.2.1 add和off原创 2020-06-30 22:20:47 · 699 阅读 · 0 评论 -
JUC并发工具十-常用的并发控制工具CountDownLatch,CyclicBarrier和Semaphore
目录1 CountDownLatch类使用1.1 CountDownLatch用法1.2 CountDownLatch原理1.2.1 构造方法1.2.2 countDown方法1.2.3 await方法1.3 CDL不可重复使用2 CyclicBarrier类使用2.1 CyclicBarrier用法2.2 CyclicBarrier原理2.2.1 构造方法2.2.2 await方法2.3 CyclicBarrier可重复使用3 Semaphore类使原创 2020-06-25 19:32:47 · 389 阅读 · 0 评论 -
JUC并发工具九-Atomic类
目录1 Atomic类作用2 AtomicInteger使用2.1 AtomicInteger用法2.2 AtomicInteger原理2.2.1 重要成员变量2.2.2 addAndGet方法2.3 AtomicInteger优缺点3 AtomicReference使用3.1 AtomicReference用法3.2 AtomicReference原理3.2.1 重要成员变量3.2.3 updateAndGet方法3.3.3 AtomicRefer.原创 2020-06-25 17:15:08 · 198 阅读 · 0 评论 -
JUC并发工具八-ConcurrentHashMap原理简析
目录1 几个重要的状态值1.1 每个槽点头结点的hash值1.2 sizeCtl2 源码鉴赏2.1 put方法2.2 初始化table2.3 扩容2.3.1 协助扩容(helpTransfer)2.3.2 扩容(transfer)2.4 尝试转二叉树(treeifyBin)2.5 get元素ConcurrentHashMap是jdk1.8中非常重要以及常用的工具类,通过CAS机制高性能的进行线程安全地添加、获取、扩容等操作,这里简单了解一下实现机制1 几个原创 2020-06-24 23:25:37 · 529 阅读 · 0 评论 -
JUC并发工具七-ConcurrentLinkedQueue和ConcurrentLinkedDeque
线程安全的并发队列主要有两个,ConcurrentLinkedQueue和ConcurrentLinkedDeque。区别是前者是单向队列,只能FIFO,后者是双向队列,可以FIFO也可以FILO这里先说一下队列的常用方法add:将指定的元素插入到此队列中(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用空间,则抛出 IllegalStateException。offer:将指定元素插入到此队列的尾部(如果立即可行且不会超出此队列的容量),在成功时返回 true,如果此队列已原创 2020-06-22 23:44:53 · 1043 阅读 · 0 评论 -
JUC并发工具五-synchronize和lock区别
1 synchronize是jvm层面,底层是monitorenter和monitorexit实现的;lock是具体类,api层面的锁2 synchronize不需要手动释放锁,当锁住的代码块儿执行完后就会自动释放。lock则需要手动调用unlock释放锁3 synchronize等待不可中断,除非抛异常或者方法正常完成。lock可中断,设置超时方法tryLock(timeout, timeunit)或lockInterruptibly()放代码块,调用interrupt()中断4 synchron原创 2020-06-21 17:45:00 · 316 阅读 · 0 评论 -
JUC并发工具四-ReadWriteLock
1 读写锁规则读-读可以共存,读-写不能共存,写-写不能共存2 读写锁使用 private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); // 读方法 private void read() { readWriteLock.readLock().lock(); System.out.println(Thread.currentThread() + "read start"...原创 2020-06-21 17:23:15 · 160 阅读 · 0 评论 -
JUC并发工具六-CopyOnWrite集合
顾名思义,采用写时复制技术,读的时候不加锁,写数据的时候先加锁,把当前数据复制一份进行写操作,写完毕后替换当前的数据,然后释放锁。这种集合适用于读多写少的场景。写数据的时候比较占空间,典型的拿控件换时间。常用的集合有CopyOnWriteArrayListCopyOnWriteArraySet1 CopyOnWriteArrayList首先看add方法 public boolean add(E e) { final ReentrantLock lock = this....原创 2020-06-21 12:46:24 · 191 阅读 · 0 评论 -
juc并发工具三-ReentrantLock
ReentrantLock加锁解锁就是AQS实现的Sync同步工具类在ReentrantLock中,state如果等于0,表示资源空闲;如果>0表示资源被占用,具体数值表示资源被占用次数,即重入次数1 非公平锁加锁 final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else ...原创 2020-06-21 12:42:38 · 225 阅读 · 0 评论 -
juc并发工具二-AQS
AQS全称即AbstractQueuedSynchronizer,抽象队列同步器,提供了一套依赖队列实现的FIFO的同步器框架,ReentrantLock,Semaphore,CyclicBarrier,CountDownLatch都是基于AQS实现的AQS内部维护了一个volatile的state变量和一个CLH队列,框架图如下1 AQS定义了一组模版方法供子类覆盖tryAcquire(int):独占方式。尝试获取资源,成功则返回true,失败则返回false。tryRelease(int):独占原创 2020-06-21 12:37:50 · 157 阅读 · 0 评论 -
JUC并发工具一-jvm内存模型和CAS机制
JUC同步类容器中最常用的就是Unsafe的CAS方法,比较并交换/** * var1:需要修改属性的对象 * var2:需要修改对象属性的内存地址偏移量。v通过ar1和var2两个变量可以读取到对象属性当前值 * var4:修改对象属性时候期待当前的值 * var5:将对象属性替换成的目标值 * return:如果对象当前属性和期待值相等,则赋值成功,返回true;否则复制失败,返回false */public final native boolean compareAndSwapIn原创 2020-06-21 12:33:03 · 408 阅读 · 0 评论