JUC
Qgwperfect
这个作者很懒,什么都没留下…
展开
-
AQS实现原理
AQS-->Abstract Queue Synchronized只要包含三个变量 state 加锁线程(thread) 等待队列线程1释放锁将state设置为0,加锁线程设置为null,同时回去唤醒等待队列头位置线程AQS默认是非公平锁线程1释放锁的同时,会去唤醒线程2,但是同时新来一个线程3,也去竞争这个锁,加锁成功的话,线程2还是会在等待队列进行等待...原创 2020-03-29 13:01:49 · 123 阅读 · 0 评论 -
java线程池状态及状态转换图
线程池的状态:1,RUNNING:能接受新提交的任务,并且也能处理阻塞队列中的任务2,SHUTDOWN:不再接受新提交的任务,但可以处理存量任务3,STOP:不再接受新提交的任务,也不处理存量任务4,TIDYING:所有的任务都已终止5,TERMINATED:terminated()方法执行完成后进入该状态状态转换图:...原创 2019-04-03 10:00:36 · 710 阅读 · 0 评论 -
Phaser示例
public class PhaserTest1 { private static final Random random = new Random(System.currentTimeMillis()); public static void main(String[] args) { final Phaser phaser = new Phaser(); IntStream...原创 2019-04-02 22:57:59 · 221 阅读 · 0 评论 -
RecursiveAction示例
public class ForkJoinRecursiveAction { private final static int MAX_THRESHOLD = 3; private final static AtomicInteger SUM = new AtomicInteger(0); public static void main(String[] args) throws...原创 2019-04-02 21:51:54 · 513 阅读 · 0 评论 -
RecursiveTask示例
public class ForkJoinRecursiveTask { private final static int MAX_THRESHOLD = 100; public static void main(String[] args) { final ForkJoinPool forkJoinPool = new ForkJoinPool(); ForkJoinTask...原创 2019-03-29 10:10:56 · 556 阅读 · 0 评论 -
java.util.concurrent.locks.Condition简单示例
public class ConditionExample { private final static ReentrantLock lock = new ReentrantLock(); private final static Condition condition = lock.newCondition(); private static int data = 0; ...原创 2019-03-28 21:16:22 · 405 阅读 · 0 评论 -
基于 LinkedHashMap 实现缓存
通过继承 LinkedHashMap 实现了一个简单的 LRU 策略的缓存void afterNodeInsertion(boolean evict) { // possibly remove eldest LinkedHashMap.Entry<K,V> first; // 根据条件判断是否移除最近最少被访问的节点 if (evict &&...转载 2019-02-19 15:54:13 · 334 阅读 · 0 评论 -
HashMap源码tableSizeFor()方法
源码: static final int MAXIMUM_CAPACITY = 1 << 30; /** * Returns a power of two size for the given target capacity. */ static final int tableSizeFor(int cap) { int n =...转载 2019-02-19 09:24:57 · 461 阅读 · 0 评论 -
JDK 源码中 HashMap 的 hash 方法原理
转载自 https://www.zhihu.com/question/20733617觉得这里面讲的很不错。转载 2019-02-19 09:04:14 · 94 阅读 · 0 评论 -
逐行分析AQS源码(1)——独占锁的获取
前言AQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实现轻量级和高效地获取锁。AQS虽然被定义为抽象类,但事实上它并不包含任何抽象方法。这是因为AQS是被设计来支持多种用途的,如果定义抽象方法,则子类在继承时必须要覆写所有的抽象方法,这显然是不合理的。所以AQS将...转载 2019-02-18 17:33:47 · 252 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码解读
1. 背景AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)是Doug Lea大师创作的用来构建锁或者其他同步组件(信号量、事件等)的基础框架类。JDK中许多并发工具类的内部实现都依赖于AQS,如ReentrantLock, Semaphore, CountDownLatch等等。学习AQS的使用与源码实现对深入理解concur...转载 2019-02-18 17:00:27 · 133 阅读 · 0 评论 -
深入理解AbstractQueuedSynchronizer(一)
AbstractQueuedSynchronizer简介AbstractQueuedSynchronizer提供了一个FIFO队列,可以看做是一个可以用来实现锁以及其他需要同步功能的框架。这里简称该类为AQS。AQS的使用依靠继承来完成,子类通过继承自AQS并实现所需的方法来管理同步状态。例如ReentrantLock,CountDownLatch等。本篇文章基于JDK1.8来介绍,该类有...转载 2019-02-18 16:53:47 · 206 阅读 · 0 评论 -
【JUC】JDK1.8源码分析之CountDownLatch
转自 https://www.cnblogs.com/leesf456/p/5406191.html一、前言分析完了CyclicBarrier后,下面分析CountDownLatch,CountDownLatch用于同步一个或多个任务,强制他们等待由其他任务执行的一组操作完成。CountDownLatch典型的用法是将一个程序分为n个互相独立的可解决任务,并创建值为n的CountDownL...转载 2018-11-02 10:58:39 · 293 阅读 · 0 评论