JUC-并发容器-1-ConcurrentHashMap 发表于 2020-04-13 | 分类于 JUC 述上文中分析了JDK1.7和1.8中的 HashMap 的数据结构以及一些重要的方法,本文同样从这两个版本,分析一下 ConcurrentHashMap JDK1.7 中的 ConcurrentHashMap数据结构如图 Java 7 中的 ConcurrentHashMap 最外层 ... 阅读全文 »
JUC-并发容器-0-HashMap 发表于 2020-04-13 | 分类于 JUC 述并发编程中,并发容器也是非常重要的一个工具,我们平时用的 ArrayList, HashMap 等等这些集合类都不是线程安全的,在并发环境下就可能会出现问题,JDK给我们提供了一些线程安全的容器,供我们使用 过时的并发容器在早期的版本中, Hashtable 和 Vector 就对应的是线程 ... 阅读全文 »
JUC-CAS-0-核心概念 发表于 2020-04-13 | 分类于 JUC 述上文中介绍了原子类,在原子类中有一个常用的方法就是 compareAndSet() 这个方法,这个方法其实就是一个 CAS 方法, CAS(Compare-and-Swap) 字面意思比较并替换,是一种实现并发算法时常用的技术 CASCAS有三个操作数: 内存值V,预期值A,要修改的值B,当 ... 阅读全文 »
JUC-原子类-0-介绍及基本使用 发表于 2020-04-13 | 分类于 JUC 述在并发编程中,原子类也是经常使用的一个工具,利用原子类,可以把一些操作变成一个原子操作,在多线程的情况下不需要加锁也可以保证线程安全 原子类的作用及优势原子类的作用跟锁是类似的,都是为了保证在并发环境下的线程安全,原子类相比于锁,有一定的优势 锁的粒度更细: 原子类可以把竞争范围缩小到变 ... 阅读全文 »
JUC-锁-1-锁的分类 发表于 2020-04-13 | 分类于 JUC 述Java 锁有很多种,从不通的角度来看,锁大概有以下几种分类 下面分别看一下这几种锁 悲观锁和乐观锁简单来说,悲观锁就是面对同步资源的时候,首先认为会有别的线程会来修改数据,所以先上锁,锁住之后再去修改资源,上面提到的 synchronized 和 Lock 就都是悲观锁 ... 阅读全文 »
JUC-锁-0-Lock的基本使用 发表于 2020-04-13 | 分类于 JUC 述在并发开发中,锁也是经常使用的一个工具,主要是用于对并发资源的访问,常用的锁就是 Lock 和 synchronized ,这两个锁都可以达到线程安全的目的,但是在使用上有较大差别. Lock 和 synchronizedLock 一般情况用于 synchronized 不满足要求或者不合适 ... 阅读全文 »
JUC-ThreadLocal-1-原理解析 发表于 2020-04-13 | 分类于 JUC 述上文中了解了 ThreadLocal 的常用场景和最基本的用法之后再来看一下它的原理以及一些要注意的事项 Thread,ThreadLocal,ThreadLocalMap首先需要了解一下 Thread ,ThreadLocal ,ThreadLocalMap 这三个类之间的关系,如图 ... 阅读全文 »
JUC-ThreadLocal-0-基本使用 发表于 2020-04-13 | 分类于 JUC 述了解了线程池之后,再来看一个常用的类,就是 ThreadLocal 这个类在面试中也是很常见的,下面来看一下这个类常见的使用场景 常见使用场景ThreadLocal 比较常见的有两个地方 每个线程都需要一个独享的对象,通常是工具类,比如经常用的 SimpleDateFormat 和 ... 阅读全文 »
JUC-线程池-2-钩子方法的使用 发表于 2020-04-13 | 分类于 JUC 述上文提到了线程池的钩子方法,其实就是线程池在执行每个任务的前后执行一些操作,还有线程池的暂停与继续,等等一些辅助功能,下面看一下如何使用 钩子方法的使用ThreadPoolExecutor 提供了3个钩子方法,需要子类去根据自己的需要重写,三个方法如下: 123protected voi ... 阅读全文 »
JUC-线程池-1-创建及使用 发表于 2020-04-13 | 分类于 JUC 述上文中对线程池做了一个基本的了解,说了这么多,如何去创建一个线程池呢? JUC 包里面给我们提供了一个工具类就是 java.util.concurrent.Executors ,通过这个类我们就可以创建几种不同类型的线程池,来看一下这个类中常用的几个方法 固定数量线程池通过 Executors ... 阅读全文 »