JUC
real沛林
践于当下
展开
-
Java 高并发基础导论
Synchronize Voltile ReentrantLock原创 2017-08-03 00:00:02 · 289 阅读 · 0 评论 -
JUC锁框架——初识AQS
AQS:AbstractQueuedSynchronizer Synchronized和ReentrantLock的实现原理是不一致的,Synchronized是依靠java虚拟机的功能实现的。ReentrantLock则是有AQS这样一个背后大Boss在提供帮助啊! Thread.sleep、Object.wait、LockSupport.park 区别 ...原创 2019-08-09 17:43:48 · 160 阅读 · 0 评论 -
JUC锁框架——基于AQS的实现,从ReentrantLock认识独占和共享
JDK中有以下基于AQS的实现 ReentrantLock CountDownLatch Semaphore ReentrantReadWriteLock CyclicBarrier (委托给ReentrantLock) 首先关于源码中经常出现 final ReentrantLock takeLock = this.takeLock 写法: 这是一个有关volatile变量的lock-free...原创 2019-08-12 11:23:41 · 367 阅读 · 0 评论 -
JUC锁框架——CountDownLatch、CyclicBarrier和Semaphore
有用于同步一批线程的行为,分别是CountDownLatch、Semaphore和CyclicBarrier。 join方法 // Thread.java中也有一个类似的基础方法 public final synchronized void join(long millis) throws InterruptedException { long base = S...原创 2019-08-13 14:22:19 · 149 阅读 · 0 评论 -
并发概念基础:并发、同步、阻塞
多线程和并发 并发与多线程之间的关系就是目的与手段之间的关系。 并发(Concurrent)的反面是串行,串行好比多个车辆行驶在一股车道上,它们只能“鱼贯而行”。而并发好比多个车辆行驶在多股车道上,它们可以“并驾齐驱”。并发的极致就是并行(Parallel)。多线程就是将原本可能是串行的计算“改为”并发(并行)的一种手段、途径或者模型。 并行:在操作系统中,一组程序按独立异步的速度执行,无论从...原创 2019-10-08 10:59:51 · 319 阅读 · 0 评论 -
JUC并发容器——ConcurrentHashMap
Hashmap (1) HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections的sync...原创 2019-10-11 09:23:57 · 141 阅读 · 0 评论 -
并发概念基础:线程安全与线程间通信
并发概念基础:线程安全与线程间通信原创 2019-10-12 09:29:58 · 145 阅读 · 0 评论 -
并发概念基础:线程,死锁
线程的状态,method 死锁的条件原创 2019-10-12 00:49:49 · 75 阅读 · 0 评论 -
JUC并发容器——ConcurrentLinkedQueue
线程安全的队列 阻塞队列:使用一个锁(进队和出队同一个锁)和两个锁(入队和出队用不同的锁) 非阻塞队列:ConcurrentLinkedQueue ConcurrentLinkedQueue特性: 是一个基于链接节点的无界线程安全队列, 按先进先出的插入顺序进行排序, 它采用“wait-free”算法(CAS算法)实现, 具体实现:添加元素时它会添加到队列尾部;获取元素时,它会返回队列头部的...原创 2019-10-19 17:15:54 · 99 阅读 · 0 评论 -
JUC并发容器——阻塞队列
生产者消费者 尽管性能不如并发队列,但阻塞队列更加适合生产消费者的场景,这是因为它支持两个附加操作: 支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列不满。 支持阻塞的移除方法:当队列空时,队列会阻塞获取元素的线程,直到队列非空。 ...原创 2019-10-19 17:24:46 · 137 阅读 · 0 评论 -
JUC并发容器——跳表
跳表 SkipList 跳表是随机化的一个数据结构,以O(logn)的期望时间支持查找和插入。 跳表是链表的优化,在有序链表的基础上,它把一维的线性链表做了一些提取,相当于新建了若干层索引,借索引减少比较次数。 JDK中没有SkipList的代码实现(和其他数据结构相比,其实并不复杂),但却有Doug Lea书写的ConcurrentSkipList 在网上学习了一些材料。 https://w...原创 2019-10-19 17:39:39 · 312 阅读 · 0 评论