并发编程
文章平均质量分 81
并发编程
基础不牢,地动山摇...
这个作者很懒,什么都没留下…
展开
-
并发编程学习笔记
并发编程学习路线原创 2021-08-08 23:32:33 · 165 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier、Semaphore详解
目录CountDownLatch简介用法原理及源码分析CyclicBarrier简介用法原理及源码分析Semaphore简介用法原理及源码分析CountDownLatch简介CountDownLatch是 JDK 提供的并发流程控制的工具类,它是在 java.util.concurrent 包下,在 JDK1.5 以后加入,用来进行同步协作,等待所有线程完成倒计时。其中构造函数用来初始化等待计数值,await()用来等待计数归零,countDow.原创 2021-08-08 23:25:33 · 685 阅读 · 0 评论 -
AQS及Lock锁详解
目录AQS概念类图Node节点分析特点主要方法Lock继承关系公平锁和非公平锁公平锁非公平锁ReentrantLock构造函数加锁过程解锁过程可重入性可打断原理不可打断可打断模式公平锁/非公平锁实现条件队列await流程signal流程ReentrantReadWriteLock背景规则使用示例读写锁升降级原理分析先写后读再读再写小结Lock锁与Synchronized对比A.原创 2021-08-08 18:15:26 · 1512 阅读 · 0 评论 -
CAS与AtomicInteger及LongAdder浅析
概念Java中,锁占了并发的一席之地,但是锁带来的弊端就是线程会频繁的阻塞挂起,导致上下文的切换和重新调度,增加了系统开销。CAS 即 Compare and Swap,其是 JDK 提供的非阻塞原子性操作 , 它通过硬件保证了比较更新操作的原子性 ,有效减小了因为上线文切换导致的开销问题。举例-- 普通方式public class CasTest01 extends Thread{ private static int count = 1000; private stati原创 2021-08-06 00:29:58 · 282 阅读 · 0 评论 -
volatile关键字详解
要了解volatile就要从Java内存模型机以及并发三大基本特性原子性、有序性、可见性开始,《Java虚拟机规范》中定义一种“Java内存模型”来屏蔽各个硬件和操作系统的内存访问差异。Java的内存模型(Java Memory Mode, JMM)指定了Java虚拟机如何与计算机的主存(RAM)进行工作。如下图所示:Java内存模型决定了一个线程对共享变量的写入何时对其他线程可见,Java内存模型定义了线程和内存之间的抽象关系。,具体如下共享..原创 2021-08-01 16:20:05 · 244 阅读 · 0 评论 -
synchronized关键字及wait()/notify()/notifyAll()详解
概念JDK官网中对synchronized关键字有如下定义,synchronized关键字可以实现一个简单的策略来防止线程干扰和内存一致性错误,如果一个对象对多线程是可见的,那么对该对象的所有读或者写都将通过同步的方式来进行。具体表现如下:synchronized关键字提供了一种锁机制,能够确保共享变量的互斥访问,从而防止数据不一致问题的出现。 synchronized关键字包括monitor enter和monitor exit两个JVM指令,它能够保证在任何时候任何线程执行到monitor原创 2021-07-29 22:06:41 · 1659 阅读 · 0 评论 -
ThreadLocal浅析
目录介绍使用示例存储结构为何是弱引用如何体现出是弱引用为什么要用弱引用一定要remove?继承性介绍多线程访问同一个共享变量时容易出现并发问题,同步的措施一般是加锁,这增加了使用者的负担,ThreadLocal的出现换了一种思路,可以让每个线程对其进行访问时都是访问的自己线层的变量,它提供了线程本地变量,每个线程都会有这个变量的副本,当多线程操作这个变量时,实际操作的是自己本地内存的变量,从而避免了线程安全带来的问题。使用示例public class Thr原创 2021-07-25 21:15:17 · 209 阅读 · 0 评论 -
线程池使用及源码解读
目录介绍类图线程池状态基本状态状态流转核心参数执行流程拒绝策略AbortPolicyDiscardPolicyDiscardOldestPolicyCallerRunsPolicy常见线程池工具FixedThreadPoolCachedThreadPoolScheduledThreadPoolSingleThreadExecutorSingleThreadScheduledExecutorForkJoinPool自动创建线程池弊原创 2021-07-24 22:33:08 · 381 阅读 · 0 评论 -
阻塞队列详解
目录概念继承关系核心方法常见的阻塞/非阻塞队列ArrayBlockingQueueLinkedBlockingQueueSynchronousQueuePriorityBlockingQueueDelayQueueConcurrentLinkedQueue阻塞及非阻塞并发原理ArrayBlockingQueue源码分析ConcurrentLinkedQueue源码分析应用场景概念阻塞队列,也就是 BlockingQueue接口,继承了 Queu原创 2021-07-23 22:45:46 · 1588 阅读 · 2 评论 -
LockSupport浅析
简介JDK中的rt.jar包里面的LockSupport是个工具类,主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础。LockSupport类与每个使用它的线程都会关联一个许可证,默认情况下调用LockSupport类的方法的线程是不持有许可证的。LockSupport基于Unsafe类实现,下面简单介绍LockSupport主要的两个函数park如果调用park方法的线程已经拿到了与LockSupport关联的许可证,则调用LockSupport.park()时会马上返回,否则原创 2021-07-22 23:09:38 · 186 阅读 · 3 评论 -
线程的基本概念及用法
基本概念程序、进程、线程并行与并发多线程的优点多线程应用场景生命周期创建方式核心方法线程遇到的安全问题线程间通信原创 2021-07-22 12:26:02 · 408 阅读 · 0 评论 -
Future和FutureTask及线程池
用个FutrueTask时,构造FutureTask futureTask = new FutureTask(new Callable());用future时,future作为线程池的返回值,线程池的入参为new Callable();原创 2020-06-26 22:55:24 · 1520 阅读 · 0 评论 -
Java多线程的创建方式
Java多线程多线程实现一般分为两种方式一种继承Thread类复写run()方法,一种为实现Runnable接口。下面我们来具体看一下。原创 2020-03-20 09:47:49 · 203 阅读 · 0 评论