Java并发编程
文章平均质量分 96
Java并发编程源码解析系列
天乔巴夏丶
这个作者很懒,什么都没留下…
展开
-
【Java并发编程】ThreadLocal源码学习
文章目录ThreadLocal是啥?用来干啥?ThreadLocal的简单使用ThreadLocal的实现思路?ThreadLocal常见方法源码分析ThreadLocal.set(T value)ThreadLocal.get()ThreadLocal.remove()ThreadLocalMap源码分析ThreadLocalMap结构分析ThreadLocalMap的Hash算法ThreadLocalMap.set()ThreadLocalMap.resize()扩容ThreadLocalMap.get原创 2021-03-21 14:51:05 · 712 阅读 · 0 评论 -
【Java并发编程】并发操作原子类Atomic以及CAS的ABA问题
文章目录Atomic原子类基本类型AtomicInteger的常用方法AtomicInteger常见方法的使用AtomicInteger保证原子性getAndIncrement()方法的实现数组类型AtomicIntegerArray的常用方法引用类型AtomicReference常见方法的使用对象的属性修改类型AtomicIntegerFieldUpdater常用方法的使用Java8新增的原子操作类CAS的ABA问题的产生BAB的问题如何解决参考本文基于JDK1.8Atomic原子类原子类是具有原创 2021-03-21 14:50:23 · 482 阅读 · 0 评论 -
【Java并发编程】从CPU缓存模型到JMM来理解volatile关键字
文章目录并发编程三大特性原子性可见性有序性CPU缓存模型是什么高速缓存为何出现?缓存一致性问题如何解决缓存不一致JMM内存模型是什么JMM的规定Java对三大特性的保证原子性可见性有序性volatile解决的问题volatile保证原子性吗?怎么解决?volatile的实现原理volatile和synchronized的区别volatile的使用条件volatile与双重检查锁实现单例参考并发编程三大特性原子性一个操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么所有原创 2021-03-21 14:49:37 · 734 阅读 · 0 评论 -
【Java并发编程】synchronized相关面试题总结
文章目录说说自己对于synchronized关键字的了解synchronized关键字的三种使用synchronized关键字的底层原理JDK1.6之后对synchronized关键字进行的优化Java对象头的组成MarkWord的组成锁升级的过程偏向锁偏向锁的适用场景偏向锁的加锁偏向锁的撤销偏向锁的关闭轻量级锁轻量级锁的加锁轻量级锁的解锁轻量级锁的适用场景锁的优缺点对比总结synchronized关键字与ReentrantLock的区别共同点不同点参考资料说说自己对于synchronized关键字的了解原创 2021-03-21 14:48:49 · 332 阅读 · 0 评论 -
【Java并发编程】线程池相关知识点整理
文章目录为什么要用线程池?线程池的实现原理?execute方法源码ThreadPoolExecutor重要分析构造方法的重要参数线程池的简单使用任务队列有哪些?饱和策略有哪些呢?如何创建线程池?执行execute方法和submit方法的区别?几种Executors创建的常见线程池总结FixedThreadPoolSingleThreadExecutorCacheThreadPoolScheduledThreadPoolExecutorWorkStealingPoolLinkedBlockingQueue与A原创 2021-03-21 14:47:25 · 173 阅读 · 0 评论 -
【Java并发编程】常见基础问题整理
文章目录进程和线程?进程?线程?并发与并行?从JVM 的角度谈谈进程与线程的关系为什么程序计数器是私有的?为什么虚拟机栈和本地方法栈是私有的?一句话简单了解堆和方法区为什么使用多线程呢?多线程有啥用?使用多线程可能会带来哪些问题呢?线程的生命周期和状态?六种状态状态切换什么是上下文切换?什么是线程死锁,如何避免死锁?如何避免线程死锁?说说sleep()方法和wait()方法区别 和共同点?为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?参考文章首原创 2021-03-21 14:44:05 · 189 阅读 · 0 评论 -
Java并发包源码学习系列:同步组件Semaphore源码解析
文章目录Semaphore概述及案例学习类图结构及重要字段void acquire()非公平公平策略void acquire(int permits)void acquireUninterruptibly()void acquireUninterruptibly(int permits)boolean tryAcquire()boolean tryAcquire(int permits)boolean tryAcquire(int permits, long timeout, TimeUnit unit)v原创 2021-02-21 20:10:07 · 486 阅读 · 0 评论 -
Java并发包源码学习系列:同步组件CyclicBarrier源码解析
文章目录CyclicBarrier概述案例学习类图结构及重要字段内部类Generation及相关方法void reset()void breakBarrier()void nextGeneration()int await()int await(long timeout, TimeUnit unit)int dowait(boolean timed, long nanos)CyclicBarrier与CountDownLatch的区别总结参考阅读CyclicBarrier概述CyclicBarrier可原创 2021-02-20 21:01:33 · 460 阅读 · 0 评论 -
Java并发包源码学习系列:同步组件CountDownLatch源码解析
文章目录CountDownLatch概述使用案例与基本思路类图与基本结构void await()boolean await(long timeout, TimeUnit unit)void countDown()总结参考阅读CountDownLatch概述日常开发中,经常会遇到类似场景:主线程开启多个子线程执行任务,需要等待所有子线程执行完毕后再进行汇总。在同步组件CountDownLatch出现之前,我们可以使用join方法来完成,简单实现如下:public class JoinTest {原创 2021-02-20 12:17:09 · 289 阅读 · 0 评论 -
Java并发包源码学习系列:线程池ScheduledThreadPoolExecutor源码解析
文章目录ScheduledThreadPoolExecutor概述类图结构ScheduledExecutorServiceScheduledFutureTaskFutureTaskschedulevoid delayedExecute(task)boolean canRunInCurrentRunState(periodic)void ensurePrestart()ScheduledFutureTask#run()FutureTask#run()FutureTask#set(V v)FutureTask#原创 2021-02-19 20:11:14 · 842 阅读 · 1 评论 -
Java并发包源码学习系列:线程池ThreadPoolExecutor源码解析
文章目录ThreadPoolExecutor概述线程池解决的优点线程池处理流程创建线程池重要常量及字段线程池的五种状态及转换ThreadPoolExecutor构造参数及参数意义Work类void execute(Runnable command)boolean addWorker(firstTask, core)final void runWorker(Worker w)Runnable getTask()void processWorkerExit(w, completedAbruptly)void s原创 2021-02-10 22:05:50 · 880 阅读 · 0 评论 -
Java并发包源码学习系列:基于CAS非阻塞并发队列ConcurrentLinkedQueue源码解析
文章目录非阻塞并发队列ConcurrentLinkedQueue概述结构组成基本不变式head的不变式与可变式tail的不变式与可变式offer操作源码解析图解offer操作JDK1.6 hops设计意图poll操作源码解析图解poll操作总结参考阅读非阻塞并发队列ConcurrentLinkedQueue概述我们之前花了很多时间了解学习BlockingQueue阻塞队列接口下的各种实现,也大概对阻塞队列的实现机制有了一定的了解:阻塞 + 队列嘛。而且其中绝大部分是完全基于独占锁ReentrantLo原创 2021-02-06 17:24:27 · 687 阅读 · 0 评论 -
Java并发包源码学习系列:阻塞队列实现之LinkedBlockingDeque源码解析
文章目录LinkedBlockingDeque概述类图结构及重要字段linkFirstlinkLastunlinkFirstunlinkLastunlink总结参考阅读系列传送门:Java并发包源码学习系列:AbstractQueuedSynchronizerJava并发包源码学习系列:CLH同步队列及同步资源获取与释放Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别Java并发包源码学习系列:ReentrantLock可重入独占锁详解Java并发包源码学习系列:Reent原创 2021-02-03 22:20:01 · 590 阅读 · 1 评论 -
Java并发包源码学习系列:阻塞队列实现之LinkedTransferQueue源码解析
文章目录LinkedTransferQueue概述TransferQueue类图结构及重要字段Node节点前置:xfer方法的定义队列操作三大类插入元素put、add、offer获取元素take、polltransfer、tryTransferxfer三大流程xfertryAppendawaitMatchLinkedTransferQueue使用案例总结参考阅读系列传送门:Java并发包源码学习系列:AbstractQueuedSynchronizerJava并发包源码学习系列:CLH同步队列及同步原创 2021-02-02 23:42:41 · 999 阅读 · 0 评论 -
Java并发包源码学习系列:阻塞队列实现之SynchronousQueue源码解析
文章目录SynchronousQueue概述使用案例类图结构put与take方法void put(E e)E take()Transfer公平模式TransferQueueQNodetransferawaitFulfilltryCancelcleanTransferQueue总结非公平模式TransferStackSNodetransferTransferStack总结总结参考阅读系列传送门:Java并发包源码学习系列:AbstractQueuedSynchronizerJava并发包源码学习系列:原创 2021-02-01 19:51:04 · 1011 阅读 · 0 评论 -
Java并发包源码学习系列:阻塞队列实现之DelayQueue源码解析
文章目录DelayQueue概述类图及重要字段Delayed接口Delayed元素案例构造器void put(E e)E take()first = null 有什么用总结参考阅读系列传送门:Java并发包源码学习系列:AbstractQueuedSynchronizerJava并发包源码学习系列:CLH同步队列及同步资源获取与释放Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别Java并发包源码学习系列:ReentrantLock可重入独占锁详解Java并发包源码学习系列原创 2021-01-30 16:44:40 · 648 阅读 · 0 评论 -
Java并发包源码学习系列:阻塞队列实现之PriorityBlockingQueue源码解析
文章目录PriorityBlockingQueue概述类图结构及重要字段什么是二叉堆堆的基本操作向上调整void up(int u)向下调整void down(int u)构造器扩容方法tryGrow源码中向上调整和向下调整实现siftUpComparablesiftDownComparableheapify建堆or堆化put非阻塞式插入take阻塞式获取remove移除指定元素总结参考阅读系列传送门:Java并发包源码学习系列:AbstractQueuedSynchronizerJava并发包源码原创 2021-01-28 21:12:12 · 896 阅读 · 0 评论 -
Java并发包源码学习系列:阻塞队列实现之LinkedBlockingQueue源码解析
文章目录LinkedBlockingQueue概述类图结构及重要字段构造器出队和入队操作入队enqueue出队dequeue阻塞式操作E take() 阻塞式获取void put(E e) 阻塞式插入E poll(timeout, unit) 阻塞式超时获取boolean offer(e, timeout, unit) 阻塞式超时插入其他常规操作boolean offer(E e)E poll()E peek()Boolean remove(Object o)总结参考阅读系列传送门:Java并发包源码原创 2021-01-28 12:59:28 · 827 阅读 · 0 评论 -
Java并发包源码学习系列:阻塞队列实现之ArrayBlockingQueue源码解析
文章目录ArrayBlockingQueue概述类图结构及重要字段构造器出队和入队操作入队enqueue出队dequeue阻塞式操作E take() 阻塞式获取void put(E e) 阻塞式插入E poll(timeout, unit) 阻塞式超时获取boolean offer(e, timeout, unit) 阻塞式超时插入其他常规操作boolean offer(E e)E poll()Boolean remove(Object o)总结参考阅读系列传送门:Java并发包源码学习系列:Abst原创 2021-01-27 16:27:48 · 1060 阅读 · 1 评论 -
Java并发包源码学习系列:阻塞队列BlockingQueue及实现原理分析
文章目录本篇要点什么是阻塞队列阻塞队列提供的方法阻塞队列的七种实现TransferQueue和BlockingQueue的区别1、ArrayBlockingQueue2、LinkedBlockingQueue3、PriorityBlockingQueue4、DelayQueue5、SynchronousQueue6、LinkedTransferQueue7、LinkedBlockingDeque阻塞队列的实现机制put方法take方法参考阅读系列传送门:Java并发包源码学习系列:AbstractQu原创 2021-01-26 18:54:10 · 1167 阅读 · 1 评论 -
Java并发包源码学习系列:JDK1.8的ConcurrentHashMap源码解析
文章目录为什么要使用ConcurrentHashMap?ConcurrentHashMap的结构特点Java8之前Java8之后基本常量重要成员变量构造方法tableSizeForput方法存值putValinitTabletreeifyBintryPresizetransferget方法取值get总结参考阅读系列传送门:Java并发包源码学习系列:AbstractQueuedSynchronizerJava并发包源码学习系列:CLH同步队列及同步资源获取与释放Java并发包源码学习系列:AQS共原创 2021-01-23 18:21:39 · 1124 阅读 · 0 评论 -
Java并发包源码学习系列:挂起与唤醒线程LockSupport工具类
文章目录LockSupport概述park与unpark相关方法中断演示blocker的作用测试无blocker测试带blockerJDK提供的demo总结参考阅读系列传送门:Java并发包源码学习系列:AbstractQueuedSynchronizerJava并发包源码学习系列:CLH同步队列及同步资源获取与释放Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别Java并发包源码学习系列:ReentrantLock可重入独占锁详解Java并发包源码学习系列:Reentra原创 2021-01-17 20:22:11 · 802 阅读 · 0 评论 -
Java并发包源码学习系列:详解Condition条件队列、signal和await
文章目录Condition接口AQS条件变量的支持之ConditionObject内部类回顾AQS中的Nodevoid await()添加到条件队列Node addConditionWaiter()void unlinkCancelledWaiters()完全释放独占锁int fullyRelease(Node node)等待进入阻塞队列boolean isOnSyncQueue(Node node)boolean findNodeFromTail(Node node)void signal()唤醒节点vo原创 2021-01-17 02:28:57 · 1084 阅读 · 1 评论 -
Java并发包源码学习系列:ReentrantReadWriteLock读写锁解析
文章目录ReadWriteLock读写锁概述读写锁案例ReentrantReadWriteLock架构总览Sync重要字段及内部类表示写锁的获取void lock()boolean writerShouldBlock()void lockInterruptibly()boolean tryLock()boolean tryLock(long timeout,TimeUnit unit)写锁的释放void unlock()读锁的获取void lock()boolean readerShouldBlock()i原创 2021-01-15 23:08:21 · 1258 阅读 · 1 评论 -
Java并发包源码学习系列:ReentrantLock可重入独占锁详解
文章目录基本用法介绍继承体系构造方法state状态表示获取锁void lock()方法NonfairSyncFairSync公平与非公平策略的差异void lockInterruptibly()boolean tryLock()方法boolean tryLock(long timeout, TimeUnit unit)释放锁void unlock()方法Condition实现生产者消费者总结参考阅读系列传送门:Java并发包源码学习系列:AbstractQueuedSynchronizerJava并原创 2021-01-11 00:17:22 · 1483 阅读 · 2 评论 -
Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别
文章目录Java并发包源码学习系列:AQS共享模式获取与释放资源独占式获取资源void acquire(int arg)boolean acquireQueued(Node, int)独占式释放资源boolean release(int arg)void unparkSuccessor(Node node)共享式获取资源void acquireShared(int arg)void doAcquireShared(int arg)void setHeadAndPropagate(Node node, int原创 2021-01-09 00:53:57 · 1482 阅读 · 0 评论 -
Java并发包源码学习系列:CLH同步队列及同步资源获取与释放
文章目录本篇学习目标CLH队列的结构资源获取入队Node addWaiter(Node mode)不断尝试Node enq(final Node node)boolean acquireQueued(Node, int)出队void setHead(Node)boolean shouldParkAfterFailedAcquire(Node,Node)boolean parkAndCheckInterrupt()void cancelAcquire(node)释放资源boolean release(int原创 2021-01-07 01:36:40 · 1304 阅读 · 0 评论 -
Java并发包源码学习系列:AbstractQueuedSynchronizer
文章目录本篇学习目标AQS概述AbstractOwnableSynchronizer同步队列与Node节点同步状态state重要方法分析独占式获取与释放同步状态共享式获取与释放同步状态AQS条件变量的支持Condition接口ConditionObject内部类参考阅读本文基于JDK1.8本篇学习目标了解AQS的设计思想以及重要字段含义,如通过state字段表示同步状态等。了解AQS内部维护链式双向同步队列的结构以及几个重要指针。了解五种重要的同步状态。明确两种模式:共享模式和独占模式。原创 2021-01-05 22:29:50 · 1050 阅读 · 0 评论 -
Java并发读书笔记:Lock与ReentrantLock
Lock位于java.util.concurrent.locks包下,是一种线程同步机制,就像synchronized块一样。但是,Lock比synchronized块更灵活、更复杂。话不多说,我们直接来看官方文档对Lock接口相关概念及功能的描述,今天又是看英文文档,翻译理解的一天。一、Lock继承关系二、官方文档解读三、Lock接口方法解读void lock()获取锁。如果...原创 2020-02-16 20:13:29 · 490 阅读 · 0 评论 -
聊聊并发Java SE1.6中的Synchronized
本文属作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/java-se-16-synchronized1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中...转载 2020-02-16 20:06:00 · 286 阅读 · 0 评论 -
Java并发读书笔记:线程间正确通信的方法
文章目录一、synchronized 与 volatile二、等待/通知机制等待通知面试常问的几个问题sleep方法和wait方法的区别关于放弃对象监视器三、等待通知典型生产者消费者模型可能会出错的代码四、使用显式的Lock和ConditionCondition接口内的方法详解Condition与Lock配合Condition接口与Object监视器五、管道输入、输出流六、Thread.join(...原创 2020-02-15 23:24:29 · 623 阅读 · 0 评论 -
Java并发读书笔记:线程通信之等待通知机制
文章目录synchronized 与 volatile等待/通知机制等待通知面试常问的几个问题sleep方法和wait方法的区别关于放弃对象监视器在并发编程中,保证线程同步,从而实现线程之间正确通信,是一个值得考虑的问题。本篇将参考许多著名书籍,学习如何让多个线程之间相互配合,完成我们指定的任务。当然本文只是学习了一部分线程间通信的方法,还有一些例如使用Lock和Condition对象,管道输...原创 2020-02-13 22:49:01 · 190 阅读 · 0 评论 -
Java并发读书笔记:线程安全与互斥同步
文章目录导致线程不安全的原因什么是线程安全不可变绝对线程安全相对线程安全线程兼容线程对立互斥同步实现线程安全synchronized内置锁锁即对象是否要释放锁实现原理啥是重进入?ReentrantLock(重入锁)API层面的互斥锁等待可中断公平锁锁绑定本篇参考许多著名的书籍,形成读书笔记,便于加深记忆。前文传送门:Java并发读书笔记:JMM与重排序导致线程不安全的原因当一个变量被多个线...原创 2020-02-12 22:46:06 · 521 阅读 · 0 评论 -
Java并发学习笔记:JMM与重排序
文章目录Java内存模型(JMM)JMM抽象结构重排序源码->最终指令序列编译器重排序处理器重排序数据依赖性as-if-serialhappens-beforehappens-before的规则happens-before关系的定义重排序对多线程的影响顺序一致性数据竞争与顺序的一致性顺序一致性内存模型JMM处理同步程序JMM处理非同步程序总结JMM遵循的基本原则:as-if-serial与h...原创 2020-02-11 19:48:07 · 1028 阅读 · 0 评论 -
Java:谈谈控制线程的几种办法
文章目录Java:谈谈控制线程的几种办法join()sleep()守护线程主要方法需要注意优先级弃用三兄弟stop()resumesuspend中断三兄弟interrupt()interrupted()isInterrupted()安全终止线程前文传送门:Java:多线程概述与创建方式Java:线程的六种状态及转化Java:谈谈控制线程的几种办法控制线程的办法诸多,本篇做出一部分整理总结...原创 2020-02-10 16:11:57 · 420 阅读 · 0 评论 -
Java:线程的六种状态及转化
文章目录Java:线程的六种状态及转化一、新建状态(NEW)二、运行状态(RUNNABLE)就绪状态(READY)其他状态 ->就绪运行状态(RUNNING)三、阻塞状态(BLOCKED)四、等待状态(WAITING)运行->等待等待->就绪五、超时等待状态(TIMED_WAITING)运行->超时等待超时等待->就绪六、消亡状态前文传送门:多线程概述及创建方式J...原创 2020-02-09 20:50:00 · 767 阅读 · 1 评论 -
Java:多线程概述与创建方式
文章目录Java:多线程概述与创建方式进程和线程并发与并行多线程的优势线程的创建和启动继承Thread类start()和run()实现Runnable接口实现Callable接口创建方式的区别Java:多线程概述与创建方式在之前的学习过程中,已经不止一次地提到了并发啊,线程啊,同步异步的内容,但是出于内容的局部一体,之前总是几笔带过,并附上:以后学习的时候再细说。那么,现在到了细说的时候,在...原创 2020-02-08 20:49:17 · 406 阅读 · 1 评论