![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 59
everyD_struggle
任重而道远
展开
-
深入理解并发编程 - StampedLock
文章目录1. 概述2. 使用案例1. 概述JDK1.8版本引入了StampedLock,该锁由一个long型的数据戳(stamp)和三种模型构成,当获取锁(比如调用readLock(),writeLock())的时候会返回一个long型的数据戳(stamp),该数据戳将被用于进行稍后的锁释放参数。如果返回的数据戳为0(比如调用tryWriteLock()),则表示获取锁失败,同时StampedLock还提供了一种乐观读的操作方式。为什么还需要引入StampedLock?ReentrantReadW原创 2021-03-01 20:47:24 · 160 阅读 · 2 评论 -
深入理解并发编程 - sun.misc.Unsafe
文章目录1. TODO1. TODO原创 2021-01-31 15:51:17 · 217 阅读 · 0 评论 -
10个1s的任务放入coresize=1,maxsize=1,阻塞队列为容量1,拒绝策略为DiscardOld的线程池
不多解释: public static void main(String[] args) { ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 10, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1), new ThreadPoolExecut原创 2020-09-18 10:13:34 · 268 阅读 · 0 评论 -
高并发IO的底层原理
读书笔记 Netty Redis Zookeeper高并发实战1.读写的基础原理用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用。read,write系统调用,也不是直接把数据写入读取到物理设备。上层应用无论是调用操作系统的read,还是调用操作系统的write,都会涉及缓冲区。调用操作系统的read,是把数据从内核缓冲区复制到进程缓冲区;write系统调用,是把数据从进程缓冲区复制到内核缓冲区。为什么要有缓存区:减少频繁地与设备之.原创 2020-05-21 20:27:15 · 476 阅读 · 0 评论 -
线程的取消和关闭
文章目录1. 线程中断1.1 线程睡眠被打断1.2 线程运行被打断1.3 二阶段终止(关闭)2. 线程取消2.1 Volatile取消(关闭线程)2.2 Future 取消1. 线程中断1.1 线程睡眠被打断class ThreadSleep implements Runnable { @Override public void run() { try { ...原创 2020-05-04 13:44:12 · 567 阅读 · 0 评论 -
什么是线程安全?
JAVA并发编程提出:当多个线程访问一个类的时候,如果不考虑这些线程在运行时环境的调度和交替执行,并且不需要额外的同步及在调用方代码不必作其他的协调,这个类的行为仍然是正确的,那么这个类是线程安全的;什么是无状态?不包含域,也没有引用其他域,只包含一次瞬时状态,会唯一的存在本地,而本地变量存在栈中,只有执行线程才能访问它无状态对象永远是线程安全的...原创 2020-05-03 17:59:59 · 125 阅读 · 0 评论 -
深入并发编程-CyclicBarrier
1. 什么是CyclicBarrier?允许一组线程全部等待彼此达到共同屏障点的同步辅助。 循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。 屏障被称为循环 ,因为它可以在等待的线程被释放之后重新使用。A CyclicBarrier支持一个可选的Runnable命令,每个屏障点运行一次,在派对中的最后一个线程到达之后,但在任何线程释放之前。 在任何一方继续进行之前,此屏...原创 2020-05-02 14:14:25 · 189 阅读 · 0 评论 -
深入并发编程-CountDownLatch
1. JDK 注释允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。CountDownLatch用给定的计数初始化。await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用CyclicBarrier.Co...原创 2020-05-02 13:58:42 · 167 阅读 · 0 评论 -
深入并发编程-Semaphore
Semaphoren. 信号标,旗语;臂板信号装置v. 打旗语,发信号只要看过AQS这个还是很好懂的文章目录1. 什么是信号量?2. JAVA-Semaphore3. 使用Semaphore1. 什么是信号量?如果学过操作系统,我们就会知道有一个PV操作,PV操作是操作系统中的一种同步机制,实现对于并发进程中临界区的管理。 而Semaphore就是支持这样的操作flag 即信号量;...原创 2020-05-02 12:33:08 · 187 阅读 · 0 评论 -
深入并发编程-ThreadLocal
文章目录1.ThreadLocal介绍2. 常用方法3. ThreadLocal类与synchronized关键字4. ThreadLocal的内部结构基本结构5. 核心方法源码5.1 set()5.2 get()5.3 remove()5.4 initialValue()6. 弱引用和内存泄漏7. hash冲突的解决1.ThreadLocal介绍/** * This class prov...原创 2020-04-24 19:32:57 · 301 阅读 · 0 评论 -
深入理解并发编程-FutureTask
本文为读书笔记可参考:FutureTask jdk8实现JKD1.8不再依赖AQS来实现文章目录1. FutureTask简介状态跃迁图2. FutureTask的使用3. FutureTask的实现(JKD1.8不再依赖AQS来实现)4. FutureTask (DK1.8)1. FutureTask简介Future接口和实现Future接口的FutureTask类,代表异步计算的...原创 2020-04-20 20:26:49 · 309 阅读 · 0 评论 -
深入理解并发编程- 原子类
本文为读书笔记文章目录1. 原子更新基本类型类1. 原子更新基本类型类todo原创 2020-04-19 22:01:35 · 229 阅读 · 0 评论 -
深入理解并发编程-阻塞队列
本文为读书笔记,<<java并发编程的艺术>>文章目录1. 什么是阻塞队列?2.介绍java里的阻塞队列2.1 ArrayBlockingQueuetodo1. 什么是阻塞队列?2.介绍java里的阻塞队列ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。Pri...原创 2020-04-19 21:59:56 · 259 阅读 · 0 评论 -
深入java并发编程-ConcurrentHashMap
1原创 2020-04-18 19:53:19 · 423 阅读 · 1 评论 -
深入理解并发编程-阻塞线程状态
因为看到了LockSupport能够使线程进入阻塞状态,就想了一下还有什么方法能够使线程进入阻塞状态吗?因为我记忆里只有拿不到锁的时候才会进入阻塞状态搜了一下引发线程进入阻塞的方法网上有这样说:(1)线程睡眠:Thread.sleep (long millis)方法,使线程转到阻塞状态。(2)线程等待:Object类中的wait()方法,(3)线程礼让,Thread.yield() 方法...原创 2020-04-18 15:15:32 · 716 阅读 · 0 评论 -
深入理解并发编程-AQS(队列同步器)
本文为读书笔记,书籍为Javab并发编程的艺术1. Lock接口在finally块中释放锁,目的是保证在获取到锁之后,最终能够被释放。不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常抛出的同时,也会导致锁无故释放。与synchronized相比:2. AbstractQueuedSynchronizer(AQS)AQS主要使用方式是继承...原创 2020-04-17 22:12:58 · 273 阅读 · 2 评论 -
深入理解并发编程-ThreadPool&Executors
1.手写线程池需要一个阻塞队列执行任务的工作线程class ThreadPool { private BlockingQueue<Runnable> taskQueue; private HashSet<Worker> workers = new HashSet<>(); //核心线程数 private int cor...原创 2020-04-17 19:44:52 · 177 阅读 · 1 评论 -
深入理解并发编程-ReentranLock
本文为读书笔记,书籍为Java并发编程的艺术1.公平锁使用公平锁时,加锁方法lock()调用轨迹如下。1)ReentrantLock:lock()。2)FairSync:lock()。3)AbstractQueuedSynchronizer:acquire(int arg)。4)ReentrantLock:tryAcquire(int acquires)。在第4步真正开始加锁,下...原创 2020-04-17 17:11:00 · 366 阅读 · 0 评论