随笔分类 -  java多线程

java 多线程的介绍 并发编程的注意点
摘要:在分析线程池的源码之前,有必要对线程池的几种状态整理一下; 1:首先看看几种状态的定义: //ctl记录了"线程池中的任务数量"和"线程池状态"2个信息 //ctl共包括32位。其中,高3位表示"线程池状态",低29位表示"线程池中的任务数量" private final AtomicInteger 阅读全文
posted @ 2019-07-19 17:40 beppezhang 阅读(669) 评论(0) 推荐(0)
摘要:1):线程池中几个成员变量的说明。 ctl:记录了"线程池中的任务数量"和"线程池状态"2个信息,包括32位。其中,高3位表示"线程池状态",低29位表示"线程池中的任务数量"。 在 ThreadPoolExecutor 类中的定义如下: private final AtomicInteger ct 阅读全文
posted @ 2019-07-19 17:39 beppezhang 阅读(272) 评论(0) 推荐(0)
摘要:ReentrantReadWriteLock 源码分析: 1:数据结构: 成员变量: private final ReentrantReadWriteLock.ReadLock readerLock; //读取锁 private final ReentrantReadWriteLock.WriteL 阅读全文
posted @ 2019-07-19 17:38 beppezhang 阅读(326) 评论(0) 推荐(0)
摘要:ReentrantLock 锁释放源码分析: 调用的是unlock 的方法: public void unlock() { sync.release(1); } 接下来分析release() 方法: public final boolean release(int arg) { // arg=1 i 阅读全文
posted @ 2019-07-19 17:36 beppezhang 阅读(286) 评论(0) 推荐(0)
摘要:CountDownLatch 源码分析: 1:CountDownLatch数据结构 成员变量 Sync类型对象 private final Sync sync; Sync是继承AQS的一个类,CountDownLatch是通过AQS和CAS来实现它的锁的功能的; 2构造方法: public Coun 阅读全文
posted @ 2019-07-19 17:20 beppezhang 阅读(593) 评论(0) 推荐(0)
摘要:// ReentrantLock 源码分析的几个关键点 以公平锁为例 t1 表示线程1 t2 表示线程2 1:t1 第一次获取锁是如何获取成功的?假设锁未被其他线程获取到2:t1 第N次是如何成功获取锁的?假设锁未被其他线程获取到3:当t1获取到锁的情况下,t2是怎么获取锁失败的,当t1 释放锁之后 阅读全文
posted @ 2019-07-02 17:51 beppezhang 阅读(345) 评论(0) 推荐(0)
摘要:最近在研究java多线程,这篇文章主要是介绍一些线程之间的通信: 1:join 的方式,一个线程等待另一个线程执行完毕后在执行,可以控制线程执行的顺序; 场景:B线程要在A线程完成后才开始任务: 不做任何控制的情况下的线程代码如下: 这样打印出来的效果如下: 这样不能保证 B 线程在A 线程执行完之 阅读全文
posted @ 2018-02-05 15:05 beppezhang 阅读(272) 评论(0) 推荐(0)