Java
87 篇文章
java
Java—并发编程(八)线程池– (4) 线程池的原理
我们介绍过,线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。线程池也有5种状态;然而,线程池不同于线程: 线程池的5种状态是:Running, SHUTDOWN, STOP, TID…
Java—并发编程(八)线程池– (3) 线程池的原理
线程池示例 在分析线程池之前,先看一个简单的线程池示例。 import java.util.concurrent.Executors; import java.util.concurrent.Exec…
Java—并发编程(八)线程池– (2) 线程池的原理
线程池的实现类是ThreadPoolExecutor类。本章,我们通过分析ThreadPoolExecutor类,来了解线程池的原理。 ThreadPoolExecutor简介 ThreadPoolE…
Java—并发编程(八)线程池– 概览
线程池架构图 1. Executor 它是"执行者"接口,它是来执行任务的。准确的说,Executor提供了execute()接口来执行已提交的 Runnable 任务的对象。Executor存在的目…
Java—并发编程(七)JUC集合 – (12) SynchronousQueue
它是一个特殊的队列,它的名字其实就蕴含了它的特征 - - 同步的队列。为什么说是同步的呢?这里说的并不是多线程的并发问题,而是因为当一个线程往队列中写入一个元素时,写入操作不会立即返回,需要等待另一个…
Java—并发编程(七)JUC集合 – (11) PriorityBlockingQueue
PriorityBlockingQueue介绍 带排序的 BlockingQueue 实现,其并发控制采用的是 ReentrantLock,队列为无界队列(ArrayBlockingQueue 是有界…
Java—并发编程(七)JUC集合 – (10) ConcurrentLinkedQueue
ConcurrentLinkedQueue介绍 ConcurrentLinkedQueue是线程安全的队列,它适用于“高并发”的场景。它是一个基于链接节点的无界线程安全队列,按照 FIFO(先进先出)…
Java—并发编程(七)JUC集合 – (9) LinkedBlockingDeque
LinkedBlockingDeque介绍 LinkedBlockingDeque是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO和FILO两种操作方式,即可以从队列的头和尾同时操作(插入…
Java—并发编程(七)JUC集合 – (8) LinkedBlockingQueue
LinkedBlockingQueue介绍 LinkedBlockingQueue是一个单向链表实现的阻塞队列。该队列按 FIFO(先进先出)排序元素,新元素插入到队列的尾部,并且队列获取操作会获得位…
Java—并发编程(七)JUC集合 – (7) ArrayBlockingQueue
ArrayBlockingQueue介绍 ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。 线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,…
Java—并发编程(七)JUC集合 – (6) ConcurrentSkipListSet
ConcurrentSkipListSet介绍 ConcurrentSkipListSet是线程安全的有序的集合,适用于高并发的场景。ConcurrentSkipListSet和TreeSet,它们虽…
Java—并发编程(七)JUC集合 – (5) ConcurrentSkipListMap
ConcurrentSkipListMap介绍 ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景。ConcurrentSkipListMap和TreeMap,它们…
Java—并发编程(七)JUC集合 – (4) ConcurrentHashMap
ConcurrentHashMap介绍 ConcurrentHashMap是线程安全的哈希表。HashMap, Hashtable, ConcurrentHashMap之间的关联如下: Ha…
Java—并发编程(七)JUC集合 – (3) CopyOnWriteArraySet
CopyOnWriteArraySet介绍 它是线程安全的无序的集合,可以将它理解成线程安全的HashSet。有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类A…
Java—并发编程(七)JUC集合 – (2) CopyOnWriteArrayList
CopyOnWriteArrayList介绍 它相当于线程安全的ArrayList。和ArrayList一样,它是个可变数组;但是和ArrayList不同的时,它具有以下特性: 1. 它最适合于具有以…
Java—并发编程(七)JUC集合 – 概览
Java集合包 在之前中,介绍java集合的架构。主体内容包括Collection集合和Map类;而Collection集合又可以划分为List(队列)和Set(集合)。 1. List的实现类主要有…
Java—并发编程(六)JUC锁 – (12) Phaser
java多线程技术提供了Phaser工具类,Phaser表示“阶段器”,用来解决控制多个线程分阶段共同完成任务的情景问题。其作用相比CountDownLatch和CyclicBarrier更加灵活。 …
Java—并发编程(六)JUC锁 – (11) Exchanger
Exchanger的使用 Exchanger是一个用于线程间数据交换的工具类,它提供一个公共点,在这个公共点,两个线程可以交换彼此的数据。 当一个线程调用exchange方法后将进入等待状态,直到另外…
Java—并发编程(六)JUC锁 – (10) Semaphore
Semaphore简介 Semaphore是一个计数信号量,它的本质是一个"共享锁"。 信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线…
Java—并发编程(六)JUC锁 – (9) CyclicBarrier
CyclicBarrier简介 CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等…
Java—并发编程(六)JUC锁 – (8) CountDownLatch
我们对CountDownLatch进行学习。和ReadWriteLock.ReadLock一样,CountDownLatch的本质也是一个"共享锁"。 CountDownLatch简介 CountDo…
Java—并发编程(六)JUC锁 – (7)共享锁和ReentrantReadWriteLock
Java的JUC(java.util.concurrent)包中的锁包括"独占锁"和"共享锁",对Java的独占锁进行了说明。这里对Java的“共享锁”进行介绍,JUC中的共享锁有CountDownL…
Java—并发编程(六)JUC锁 – (6)LockSupport
LockSupport LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且par…
Java—并发编程(六)JUC锁 – (5)Condition条件
Condition Condition的作用是对锁进行更精确的控制。Condition中的await()方法相当于Object的wait()方法 Condition中的signal()方法相当于Obj…
Java—并发编程(六)JUC锁 – (4)非公平锁
非公平锁 非公平锁和公平锁在获取锁的方法上,流程是一样的; 它们的区别主要表现在“尝试获取锁的机制不同”。 简单点说,“公平锁”在每次尝试获取锁时,都是采用公平策略(根据等待队列依次排序等待);而“非…
Java—并发编程(六)JUC锁 – (3)公平锁
我们会讲解“线程获取公平锁”的原理;在讲解之前,需要了解几个基本概念。后面的内容,都是基于这些概念的;这些概念可能比较枯燥,但从这些概念中,能窥见“java锁”的一些架构,这对我们了解锁是有帮助的。1…
Java—并发编程—自旋锁、排队自旋锁、MCS锁、CLH锁
自旋锁(SPIN LOCK) 自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。 自旋锁适用于锁保护的临界区很小的情况,临界区很…
Java—并发编程—重入锁
ReentrantLock重入锁 ReentrantLock 是一个可重入的互斥(/独占)锁,又称为“独占锁”。 ReentrantLock通过自定义队列同步器(AQS-AbstractQueuedS…
Java—并发编程—AQS(三)
第一篇,我们通过 ReentrantLock 公平锁分析了 AQS 的核心,第二篇的重点是把 Condition 说明白,同时也说清楚了对于线程中断的使用。 这篇,我们的关注点是 AQS 最后的部分,…
Java—并发编程—AQS(二)
本文关注以下几点内容: 深入理解 ReentrantLock 公平锁和非公平锁的区别深入分析 AbstractQueuedSynchronizer 中的 ConditionObject深入理解 Jav…