java并发
Wheat_Liu
戒骄戒躁,学无止境
展开
-
并发包源码解读——ThreadPoolExecutor线程池
并发包源码解读——ThreadPoolExecutor线程池 以一个简单的例子开始 //核心线程数,保持池内最少存活N个线程 int corePoolSize = 5; //最大线程数,限制池内最多存活N个线程 int maximumPoolSize = 5; //线程空闲时间,当池内线程空闲一段时间会自动销毁,但不会小于核心线程数 long keepAliveTime = 1000; TimeUnit uni原创 2020-11-23 00:06:06 · 82 阅读 · 0 评论 -
并发包源码解读——CountDownLatch&CyclicBarrier
并发包源码解读——CountDownLatch&CyclicBarrier ##1、CountDownLatch 以一个简单的例子开始 CountDownLatch latch = new CountDownLatch(1); new Thread(() -> { System.out.println("子线程准备等待countDown减到0..."); try { latch.await();原创 2020-11-18 16:26:36 · 135 阅读 · 0 评论 -
并发包源码解读——一口气带你看6个BlockingQueue
#并发包源码解读——一口气带你看6个BlockingQueue BlockingQueue是阻塞队列的一个接口,为了体现阻塞,下面主要根据构造器、put和take说明他们的区别 ##1、有界队列——ArrayBlockingQueue ArrayBlockingQueue<String> arrayBlockingQueue = new ArrayBlockingQueue<>(10); try { arrayBlockingQueue.pu原创 2020-11-18 12:22:30 · 220 阅读 · 4 评论 -
并发包源码解读——Lock&Condition
并发包源码解读——Lock&Condition 这篇可以说是ReetrantLock的第二部分 以一段简单的代码体验他们的运行流程 ReentrantLock lock = new ReentrantLock(); Condition condition = lock.newCondition(); new Thread(() -> { try { System.out.println("线程1准备获取锁原创 2020-11-15 00:13:56 · 137 阅读 · 0 评论 -
并发包源码解读——AtomicIntegerFieldUpdater&AtomicLongFieldUpdater&AtomicReferenceFieldUpdater
并发包源码解读——AtomicIntegerFieldUpdater&AtomicLongFieldUpdater&AtomicReferenceFieldUpdater 这三个类是用来更新对象属性的,至于为什么只有Integer和Long的单列出来,我也不太清楚 ##1、AtomicIntegerFieldUpdater AtomicLongFieldUpdater跟AtomicIntegerFieldUpdater类似,这里以AtomicIntegerFieldUpdater为例 At原创 2020-11-05 16:51:38 · 153 阅读 · 0 评论 -
并发包源码解读——AtomicReference&AtomicMarkableReference&AtomicStampedReference
并发包源码解读——AtomicReference&AtomicMarkableReference&AtomicStampedReference 1、AtomicReference 对象原子类,简单的cas 也同时包含getAndUpdate、getAndAccumulate等方法,都是cas不多赘述 AtomicReference<String> atomic = new AtomicReference<>("abc"); String expect原创 2020-11-05 14:12:01 · 218 阅读 · 0 评论 -
并发包源码解读——ConcurrentLinkedQueue
并发包源码解读——ConcurrentLinkedQueue 先说点题外话,安利一波看jdk源码的好处,如果你不想看,略过也可 看源码真的对咱们程序员很有帮助。大家可能觉得看源码就是为了精通内部机制、然后会用,或者就是为了面试。但其实不是的,就我自身而言,我刚接触源码,看ArrayList的时候也是非常非常的慢,很多地方不知道大神写的什么意思,他们写这块逻辑的时候是怎么考虑的,可能得边看边存疑,然后回头再看一遍又一遍,又枯燥又没有成就感,哪有自己写一个页面或者一个后台功原创 2020-10-08 15:39:52 · 146 阅读 · 0 评论 -
并发包源码解读——AtomicLong&LongAdder&LongAccumulator
之前写了StampedLock源码简直要吐血,发现看的太细了好像也不太好,今天看点容易看懂的 由于为了跟LongAdder比较,特意选了AtomicLong,其他的还有AtomicInteger、AtomicBoolean等等 1、AtomicLong 以一个简单的例子起步 public static void main(String[] args) { final AtomicLong atomicLong = new AtomicLong(); atomicLong.ge原创 2020-09-28 17:29:33 · 176 阅读 · 0 评论 -
并发包源码解读——StampedLock
并发包源码解读——StampedLock 我们还是以类似这样的简单例子开头 public static void main(String[] args) throws InterruptedException { final StampedLock stampedLock = new StampedLock(); final long stamp = stampedLock.writeLock(); Thread.sleep(1000); n原创 2020-09-21 21:08:39 · 221 阅读 · 0 评论 -
并发包源码解读——ReentrantReadWriteLock
写在前面: 读写锁也是分公平/非公平的,由于上一章已经讲了公平锁和非公平锁的区别,而且也说明了非公平锁使用率更高的原因,那么我们主要以介绍非公平锁实现逻辑为主 可以先告诉大家一个结论,这样方便理解:不同线程读读并存,读写互斥,写写互斥 1、构造器 读写锁的构造器很简单,就是先初始化一个公平/非公平锁,然后再根据这个锁构造读锁和写锁 public ReentrantReadWriteLock(boolean fair) { sync = fair ? new FairSync() : new原创 2020-08-27 17:47:21 · 169 阅读 · 0 评论 -
并发包源码解读——ReentrantLock
1、构造器 ReentrantLock可以构造两种锁:公平锁和非公平锁 我们可以先复习一下概念 1.1、非公平锁 每个等待中的线程都有相等的几率抢占到锁(不排队,可以插队,所以不公平) 优点:吞吐量高,因为在锁被其他资源抢占时,公平锁需要将每个新来的线程依次挂起放入等待队列,而非公平锁有几率使新来的线程直接获取到锁,性能的差异就在于新线程的挂起和唤醒(那是不是同步方法耗时越长,性能差异越小?) 缺点:在等待队列中的线程有可能长时间获取不到锁,处于饥饿状态 默认构建非公平锁 public ReentrantL原创 2020-06-18 15:19:45 · 194 阅读 · 0 评论