- 博客(5)
- 收藏
- 关注
原创 抽象同步队列AQS详解
AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的。 类图 1、AQS是一个FIFO的双向队列,其内部通过节点head和tail记录队首和队尾元素 2、队列元素的类型为Node。其中Node中的thread变量用来存放进入AQS队列里面的线程 3、Node节点内部的SHARED用来标记该线程是获取共享资源时被阻塞挂起后放入AQS队列的 4、EXCLUSIVE用来标记线程是获取独占资源时被挂起后放入AQS队列
2021-10-10 18:57:05
512
原创 线程安全的ArrayList——CopyOnWriteArrayList
CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。同时因为获取—修改—写入三步操作并不是原子性的,所以在增删改的过程中都使用了独占锁,来保证在某个时间只有一个线程能对list数组进行修改。 类图 每个CopyOnWriteArrayList对象里面有一个array数组对象用来存放具体元素 ReentrantLock独占锁对象用来保证同时只有一个线程对array进行修改。 Reentr
2021-10-10 17:01:41
2585
原创 Random类与ThreadLocalRandom类对比
ThreadLocalRandom类是JDK 7在JUC包下新增的随机数生成器,它弥补了Random类在多线程下的缺陷。 Random类——java.util.Random Random random = new Random(); int randomnum = random.nextInt(); 1、单线程下的随机数生成原理 (1)一个默认的种子,这个种子其实是一个long类型的数字,你可以在创建Random对象时通过构造函数指定,如果不指定则在默认构造函数内部生成一个默认的值。 (2)首先
2021-10-10 16:48:18
346
原创 java线程安全基础
为什么要进行多线程并发编程? 多核CPU时代的到来打破了单核CPU对多线程效能的限制。多个CPU意味着每个线程可以使用自己的CPU运行,这减少了线程上下文切换的开销,但随着对应用系统性能和吞吐量要求的提高,出现了处理海量数据和请求的要求,这些都对高并发编程有着迫切的需求。 共享资源 共享资源,就是说该资源被多个线程所持有或者说多个线程都可以去访问该资源。 线程安全问题是指当多个线程同时读写一个共享资源并且没有任何同步措施时,导致出现脏数据或者其他不可预见的结果的 如果多个线程都只是读取共享资源
2021-10-10 16:41:17
208
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人