
Java并发
文章平均质量分 93
多线程
daliucheng
这个作者很懒,什么都没留下…
展开
-
从ReentrantLock分析AbstractQueuedSynchronizer(AQS)—Condition分析
从ReentrantLock分析AbstractQueuedSynchronizer(AQS)—Condition分析属性分析在Condition里面有一个Condition Queue,这个Condition Queue是一个单链表,是通过Node得nextWaiter来关联起来得。下面得就是头和尾节点,Node是和WaitQueue总得节点类型是一致得。private transient Node firstWaiter;private transient Node lastWaiter;原创 2021-11-03 00:33:47 · 127 阅读 · 0 评论 -
从ReentrantLock分析AbstractQueuedSynchronizer(AQS)—ReentrantLock加锁解锁分析
从ReentrantLock分析AbstractQueuedSynchronizer(AQS)—ReentrantLock加锁解锁分析ReentrantLock是基于AQS来实现的,一般来说,基于AQS的实现的锁,在锁内部都有一个静态内部类。将锁的实现委托给静态内部类来实现,并且AQS要求,继承AQS,必须要实现几个特定的方法tryAcquire。 在独占模式下尝试获取锁tryReleas。 在独占模式下尝试释放锁tryAcquireShared。 在共享模式下尝试获原创 2021-10-31 18:50:01 · 143 阅读 · 0 评论 -
CyclicBarrier 解析
CyclicBarrier 解析1. 属性分析//private final ReentrantLock lock = new ReentrantLock();// 等待触发的集合private final Condition trip = lock.newCondition();// Barrier数量private final int parties;// 触发之后的回调(也就是触发之后的动作)private final Runnable barrierCommand;// 表示一代原创 2021-10-22 23:23:31 · 114 阅读 · 0 评论 -
CountDownLatch分析
CountDownLatch分析1. 属性分析很简单,就一个Sync属性,CountDownLatch是基于AQS来实现的。一般来说,基于AQS实现的锁或者一些别的东西,里面都有个继承与AQS的静态内部类,功能的实现都是委托给这个静态内部类来实现的。这里也是。private final Sync sync;2. 构造方法count合法性检查,创建同步器(Sync)public CountDownLatch(int count) { if (count < 0) throw new原创 2021-10-19 23:24:13 · 190 阅读 · 0 评论 -
ScheduleExecutorService分析
ScheduleExecutorService分析,从源码分析,详细的分析了具体的实现机制。快来看看吧原创 2021-10-17 23:57:11 · 957 阅读 · 0 评论 -
ThreadPoolExecutor 分析
从源码分析,解密线程池实现的细节,快来看看吧原创 2021-10-11 23:23:40 · 303 阅读 · 0 评论 -
Thread和ThreadGroup分析
在分析Thread的时候了ThreadGroup,从源码开始,简单的做一个分析,快来看看吧原创 2021-09-27 00:14:07 · 435 阅读 · 1 评论 -
DelayQueue 分析
DelayQueue 的源码分析。从源码开始分析,涉及到leader和follower的设计模式。快来看看吧原创 2021-09-25 15:57:55 · 577 阅读 · 0 评论 -
PriorityBlockingQueue 分析
从源码分析PriorityBlockingQueue 的实现机制,对其中有意思的地方,做了说明,快来看看吧原创 2021-09-22 21:59:39 · 216 阅读 · 0 评论 -
LinkedBlockingQueue
LinkedBlockingQueue 分析,从源码分析,清晰明了的展示LinkedBlockingQueue的原理,快来看看吧原创 2021-09-21 13:37:54 · 330 阅读 · 0 评论 -
CopyOnWriteArrayList分析
CopyOnWriteArrayList分析,继上次arrayList之后,源码分析,CopyOnWriteArrayList和ArrayList不同的地方。快来看看吧原创 2021-09-20 16:14:13 · 97 阅读 · 0 评论 -
Future实现分析
分析Future接口和FutureTask的实现,对主要的方法都有分析,快来看看吧原创 2021-09-17 23:55:47 · 297 阅读 · 0 评论 -
多线程编码-消费者模式(go )
消费者模式这种模式耳熟能详,在java中和go中都有不同的实现。这种模式就很适合两个速率不一样的组件,一个快,一个慢,中间套一个 消费者模式的组件,就能很好的缓解这种尴尬,大数据的kafka 就是这个作用,从 flume中抽取的日志进kafka,在从kafaka到某个组件,kafka扮演的角色就是缓冲的作用。这个例子模拟的是一个线程读,多个线程更改,。模拟从数据库中读取数据,数据更新之后,在做更新。为了方便,我用内存模拟数据库了这是我写的思维导图可以看看https://www.processon.c原创 2020-10-17 19:13:39 · 203 阅读 · 0 评论 -
多线程编码-发送邮件(go和java 实现)
发送邮件我的一个简单的 思维导图 https://www.processon.com/mindmap/5f8a9fcc07912906db2cd5af简单来讲,就是线程之间数据交互的问题简单的时序图如下:(时序图这个东西就是一个随着时间线往下走的)1. go实现go天生就支持并发,chan就是在协程之间同步数据的。/**go 的主函数的包名必须为 main*/package mainimport ( "log" "strconv" "sync" "time")/**原创 2020-10-17 17:48:08 · 496 阅读 · 0 评论 -
线程同步 保护性暂停
线程同步1. 线程同步模式保护性暂停1.1 简介一个线程等待一个线程的结果,或者也可以是线程之间同步】1.2 实现思路synchronizedsynchronized 加锁 要关联到同一个对象,使用wait和notifyAll1.3 实现先定义一个 用来在俩线程之间 传递的对象,class Temp{ static Object lock = new Object(); // 1 Object result = null; publi原创 2020-08-12 17:05:47 · 304 阅读 · 0 评论 -
ReentrantLock源码原理解释
ReentrantLock原理解释这种东西就是心中有个大概就好了,尝试看看源码也听有意思的。 多几次debug就好了注意:这个就是一个 state 在加一个双向链表只要记住这个情况,后面debug起来就顺利了。 ReentrantLock lock = new ReentrantLock(); new Thread(()->{ lock.lock(); try { System.out.原创 2020-08-12 14:52:58 · 329 阅读 · 0 评论 -
java线程(1) —— 自定义线程池(2)
java线程(1) —— 自定义线程池(2)上篇文章存在的问题put方法没有超时等待,如果消息队列没有消费,如果消息队列一直是满的,生产者应该是什么操作,有以下的几种策略超时等待让调用者放弃任务执行死等让调用者抛出异常让调用者自己执行任务上面所说的这些个策略,如果按照之前的if else 写 就很烦。将这个什么策略。让调用者来实现。在这里实现一个接口,将实现方式给调用者给。...原创 2020-04-09 23:01:43 · 211 阅读 · 0 评论 -
java线程(1) —— 自定义线程池(1)
自定义线程池1. 线程池的作用减少在创建和销毁线程上所花的时间以及系统资源的开销如果不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存2. 实现自定义的线程池构建步骤消息队列(任务队列)线程池测试想法:按照上面的构建步骤开始说:消息队列先有一个容器,有两个方法,一个 put 一个take ,这个队列要多个线程访问,所以用锁线程池有一个线程集合,有一个 ...原创 2020-04-09 19:17:23 · 229 阅读 · 0 评论