java多线程
文章平均质量分 92
多线程
-夏夜凉月-
最近在把博客里面的内容进行系统的整理,平常比较懒,没怎么写博客,趁最近有时间,做一个系统的整理,进行查漏补缺,如有不正确的望大家指正,笔者每个例子都经过测试,力争不误人子弟。
展开
-
java多线程之线程池ThreadPoolExecutor源码分析
前言上一篇咱们分析了线程池的架构和它的工作流程,并且最后创建了一个线程池,本篇咱们就来深入分析线程池的实现类ThreadPoolExecutor。原创 2020-05-24 12:45:33 · 1909 阅读 · 1 评论 -
java多线程之线程池简介
前言池化技术已经屡见不鲜了,比如数据库连接池,大家的项目中应该也用到了线程池。池化技术的好处:降低资源的消耗,提高响应速度,提高线程的可管理性。本篇主要是和大家一起分析下线程池的架构和它的原理。1、线程池架构图架构图中,有三个接口,三个类,下面分别介绍下它们:1、Executorpublic interface Executor { void execute(Runnable command);}Executor的接口只定义了一个方法,该方法是用来执行已提交的 Runnable 任原创 2020-05-22 16:35:09 · 246 阅读 · 0 评论 -
java多线程之ArrayBlockingQueue源码解析
前言ArrayBlockingQueue从名字上我们就可以知道:以数组实现的阻塞队列。它是线程安全的,满足队列的特性:先进先出。下面我们来分析下它的源码,了解下它的实现过程。1、属性public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { //存放元素的数组 final Obj原创 2020-05-21 11:20:20 · 235 阅读 · 0 评论 -
java多线程之ConcurrentHashMap源码(JDK1.8)解析
前言ConcurrentHashMap是线程安全的HashMap,本篇将和大家一起来分析它在JDK1.8的源码(在JDK1.6、JDK1.7、中,每个版本的源码都不同)。1、简介ConcurrentHashMap内部数据结构是:数组+链表+红黑树。数组中存放的是Node,下面是它的内部类,实现了Map.Entry<K,V>接口:static class Node<K,V> implements Map.Entry<K,V> { final int hash原创 2020-05-18 12:37:38 · 291 阅读 · 0 评论 -
Java多线程系列文章目录
前言最近在总结java多线程,整理一个目录,逐步完善……1、基础篇Java线程概念以及三种实现的方式java多线程之Synchronized关键字2、JUC.原子类java多线程之AtomicLong原子类3、JUC.锁java多线程之ReentrantLock互斥锁java多线程之ReentrantLock公平锁java多线程之ReentrantLock非公平锁java多线程之共享锁和ReentrantReadWriteLockjava多线程之Semaphorejava原创 2020-05-17 14:38:43 · 195 阅读 · 0 评论 -
java多线程之CopyOnWriteArraySet源码解析
前言CopyOnWriteArraySet可以理解为一个线程安全的HashSet,它的内部操作是由CopyOnWriteArrayList实现的,对CopyOnWriteArrayList不太熟悉的可以看看博主这篇文章:java多线程之CopyOnWriteArrayList源码解析1、结构图2、构造器public class CopyOnWriteArraySet<E> extends AbstractSet<E> implements java.io.S原创 2020-05-16 20:49:18 · 232 阅读 · 0 评论 -
java多线程之CopyOnWriteArrayList源码解析
前言CopyOnWriteArrayList是一个线程安全的ArrayList,对ArrayList内部结构不太清楚的可以看看博主的这篇文章:从源码分析java容器之ArrayList,看完这篇文章,你会知道为什么ArrayList是非线程安全的。然后你再来看这篇文章,看看CopyOnWriteArrayList是如何保证线程安全的。1、结构图从结构图中,我们可以看出CopyOnWriteArrayList本质上还是一个List,内部数据结构还是数组。2、分析源码2.1、属性public cl原创 2020-05-15 11:14:01 · 254 阅读 · 0 评论 -
java多线程之CyclicBarrier源码解析
前言本篇将分析CyclicBarrier的源码,分析结束后,会用一个示例展示CyclicBarrier,并比较CyclicBarrier和CountDownLatch的区别。1、CyclicBarrier的简介CyclicBarrier允许一组线程在触发屏障之前相互等待,直到达到某一条件才继续执行;CyclicBarrier在这些线程释放后,又可以重新使用,所以也称循环栅栏。2、分析源码2.1、构造方法//定义在触发屏障之前必须调用的线程数public CyclicBarrier(int pa原创 2020-05-14 17:10:12 · 238 阅读 · 0 评论 -
java多线程之CountDownLatch源码解析
前言本篇开始分析CountDownLatch的源码,分析结束后,会用一个示例展示CountDownLatch的应用场景。1、简介CountDownLatch本质上是一个共享锁,内部维护了一个Sync,Sync是继承AQS抽象类的,它没有公平和不公平之分,含义是允许一个或多个线程等待其它线程的操作执行完毕后再执行后续的操作。2、分析源码2.1、函数列表//构造一个内部维护给定计数器的CountDownLatchCountDownLatch(int count)// 等待,直到CountDown原创 2020-05-13 19:20:51 · 285 阅读 · 0 评论 -
java多线程之Semaphore源码解析
前言本篇开始分析Semaphore(信号量)的源码,分析结束后,会用一个示例展示Semaphore的应用场景。1、简介Semaphore是一个计数信号量,维护了一个信号量许可集。每次调用acquire()都将消耗一个许可,每次调用release()都将归还一个许可。2、结构图Semaphore的内部维护了一个Sync内部类,Sync是继承AQS的抽象类,Sync包括两个子类:"公平信号量"FairSync 和 "非公平信号量"NonfairSync。3、分析源码3.1、信号量构造函数pub原创 2020-05-12 14:20:25 · 237 阅读 · 0 评论 -
java多线程之共享锁和ReentrantReadWriteLock源码解析
前言前面我们分析了Synchronized(同步锁),ReentrantLock(独占锁),本篇开始分析ReentrantReadWriteLock(共享锁),JUC中的共享锁还有CountDownLatch, CyclicBarrier, Semaphore,后面都会进行分析。1、ReentrantReadWriteLock结构图2、调用的方法关系图3、获取共享锁ReadLock中的lock方法,源码如下:public void lock() { //Sync继承AQS,此方法实现在原创 2020-05-10 20:12:05 · 318 阅读 · 0 评论 -
java多线程之ReentrantLock非公平锁源码解析
前言上一篇咱们分析了ReentrantLock公平锁的获取和释放的源码,本篇再看非公平锁的源码就轻松多了,上一篇没看的建议返回去先看公平锁的源码分析。1、获取非公平锁下面是非公平锁获取锁的源码,是在ReentrantLock.java的NonfairSync类中。final void lock() { //通过CAS判断"锁"是不是空闲状态 if (compareAndSetState(0, 1)) //设置“当前线程”为“锁”的持有者 setExclusi原创 2020-05-09 16:21:26 · 229 阅读 · 0 评论 -
java多线程之ReentrantLock公平锁源码解析
前言本篇是基于JDK8版本,分析ReentrantLock公平锁的获取和释放的源码。1、获取公平锁final void lock() { //ReentrantLock是可重入锁,所以单个线程每次进入都+1,初始值是0 acquire(1);}public final void acquire(int arg) { //这里总共有4个方法,下面会分别进行详细分析 if (!tryAcquire(arg) && acquireQueued(addW原创 2020-05-08 17:51:43 · 267 阅读 · 0 评论 -
java多线程之ReentrantLock互斥锁
前言上一篇文章,我们一起学习了synchronized关键字控制的同步锁,从本篇开始,将开始介绍JUC包中的锁,相比同步锁,JUC包中的锁的功能更加强大,它为锁提供了一个框架,该框架允许更灵活地使用锁。1、ReentrantLock介绍ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”,可重入的意思是,ReentrantLock锁可以被单个线程多次获取,“独占锁”的意思是,在...原创 2020-05-04 10:30:38 · 597 阅读 · 0 评论 -
java多线程之AtomicLong原子类(JDK8)
引言有的同学可能会问这个问题,有了Long类型,为什么还要弄一个AtomicLong类出来?因为在32位的操作系统中,64位的Long类型变量会被jvm拆分为两个32位的来操作,因此不具备原子性。而AtomicLong类型可以保证原子性。1、AtomicLong介绍AtomicInteger, AtomicLong和AtomicBoolean这3个基本类型的原子类的原理和用法相似。本章以J...原创 2020-05-03 16:57:58 · 1413 阅读 · 0 评论 -
java多线程之Synchronized关键字
synchronized的优化是在jdk底层进行的,每个版本都会有差异,我们只要记住,在java中,每一个对象有且仅有一个同步锁,当我们调用某对象的synchronized方法时,就获取了该对象的同步锁,不同线程对同步锁的访问是互斥的原创 2020-05-03 11:53:36 · 290 阅读 · 0 评论 -
Java线程概念以及三种实现的方式
前言从本章开始,我们将展开对多线程的学习,多线程的内容比较多,将会挑选主要的类进行分析,本章主要是带大家回顾下线程的基础知识。1、线程的状态我们将由一张图,来看看线程由哪些状态说明:线程共包括以下5种状态。新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。就绪状态(Runnable): 也被...原创 2020-04-25 20:33:35 · 225 阅读 · 0 评论