003-多线程-JUC线程池-几种特殊的ThreadPoolExecutor【newFixedThreadPool、newCachedThreadPool、newSingleThreadExecutor、newScheduledThreadPool】 ...
分类:
编程语言 时间:
2019-06-19 18:34:23
阅读次数:
103
1、CopyOnWrite (1)、在写操作的线程,会将数组复制出来一份进行操作。而原本的数组不会做改变。 (2)读线程则不会受到影响,但是可能读到的是一个过期的数据。 在juc(java.util.concurrent)包下有着这么两个类,CopyOnWriteArrayList 和 CopyOn ...
分类:
编程语言 时间:
2019-06-19 16:58:30
阅读次数:
85
概要 本章是"JUC系列"的CopyOnWriteArrayList篇。接下来,会先对CopyOnWriteArrayList进行基本介绍,然后再说明它的原理,接着通过代码去分析,最后通过示例更进一步的了解CopyOnWriteArrayList。内容包括:CopyOnWriteArrayList介 ...
分类:
编程语言 时间:
2019-06-18 12:32:38
阅读次数:
132
概要 本章是JUC系列中的CopyOnWriteArraySet篇。接下来,会先对CopyOnWriteArraySet进行基本介绍,然后再说明它的原理,接着通过代码去分析,最后通过示例更进一步的了解CopyOnWriteArraySet。内容包括:CopyOnWriteArraySet介绍Copy ...
分类:
编程语言 时间:
2019-06-18 12:11:55
阅读次数:
105
JUC包下的ReentrantLock是基于Aqs模板实现的,它区分公平锁和非公平锁,内部实现了两个同步器,本文关注非公平锁部分。 伪代码 我们先看两个伪代码: 1、获取锁 我们看到,如果一次获取成功则结束,如果没有获取成功将进入循环中,并且当前线程阻塞直到被唤醒并且获取到锁才结束。 2、释放锁 释 ...
分类:
其他好文 时间:
2019-06-17 01:15:02
阅读次数:
175
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。(读取值时强行获取主内存中的值,设置值时将工作内存的数据刷新到主内存中)2)禁止进行指令重排序。注意:不具备原子性,使用也有很多限制,需要原子性则可以使用juc的锁机制,如:synchro
分类:
其他好文 时间:
2019-06-14 17:55:51
阅读次数:
133
Collections 工具类常用方法: 排序 查找,替换操作 同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合 ...
分类:
其他好文 时间:
2019-06-08 22:51:06
阅读次数:
126
JUC源码分析 集合篇(七)PriorityBlockingQueue __PriorityBlockingQueue 是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素,是二叉树最小堆的实现。__ PriorityBlockingQueue 数据结构和 PriorityQueue 一致,而线 ...
分类:
其他好文 时间:
2019-05-26 15:58:49
阅读次数:
89
JUC源码分析 集合篇(五)BlockingQueue 阻塞式队列实现原理 以 LinkedBlockingQueue 分析 BlockingQueue 阻塞式队列的实现原理。 1. 数据结构 LinkedBlockingQueue 和 ConcurrentLinkedQueue 一样都是由 hea ...
分类:
其他好文 时间:
2019-05-26 09:23:28
阅读次数:
107
JUC源码分析 集合篇(三)ConcurrentLinkedQueue 在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现。 ...
分类:
其他好文 时间:
2019-05-25 20:07:10
阅读次数:
171