
并发
文章平均质量分 72
并发
NaughtyBo
ctrl + c | ctrl + v
展开
-
线程池处理异常
【代码】线程池处理异常。原创 2025-02-14 22:26:41 · 296 阅读 · 0 评论 -
并发工具CountDownLatch、CyclicBarrier、Semaphore
*** 描述:工厂中,质检,5个工人检查,所有人都认为通过,才通过*/i < 5;i++) {@Overridetry {System.out.println("No." + no + "完成了检查。");System.out.println("等待5个人检查完.....");// 这里也可以设置超时等待时间, 如: latch.await(5, TimeUnit.SECONDS);System.out.println("所有人都完成了工作,进入下一个环节。");原创 2025-02-08 23:09:38 · 638 阅读 · 0 评论 -
Java基础-队列
ABQ中用来存储元素的实际上是一个数组,takeIndex和putIndex分别表示队首元素和队尾元素的下标,count表示队列中元素个数,lock是一个可重入锁,notEmpty和notFull是等待条件。Deque,Double ended queue,Queue的子接口,定义头尾操作功能,既可在队头添加(删除)元素,也可在队尾添加(删除)元素。循环队列,将单队列的首位进行相连,形成一个圆圈,这样就不会发生角标越界的情况,如distruptor实现;问题,尾指针指向一个不存在的数组索引。原创 2024-12-31 23:09:21 · 541 阅读 · 0 评论 -
CompletableFuture
CompletableFuture。原创 2024-09-01 00:22:30 · 763 阅读 · 0 评论 -
并发知识学习
aqs中有2个队列,一个是同步队列,另外一个是条件队列简单记住:独占没有朋友,所以是null。共享就有朋友,所以是固定的node对象。nextWaiter就是表示节点的模式,在条件队列中指向下一个节点。原创 2023-06-18 21:57:28 · 155 阅读 · 0 评论 -
Java JUC 并发编程(笔记)
文章目录再谈多线程并发与并行顺序执行并发执行并行执行再谈锁机制重量级锁轻量级锁偏向锁锁消除和锁粗化JMM内存模型Java内存模型重排序volatile关键字happens-before原则多线程编程核心锁框架Lock和Condition接口可重入锁公平锁与非公平锁读写锁锁降级和锁升级队列同步器AQS底层实现公平锁一定公平吗?Condition实现原理自行实现锁类原子类原子类介绍ABA问题及解决方案并发容器传统容器线程安全吗并发容器介绍阻塞队列并发编程进阶线程池线程池的使用执行带返回值的任务执行定时任务线程池原创 2023-09-10 22:15:44 · 396 阅读 · 0 评论 -
FutureTask&线程池&Aqs
原创 2021-09-12 11:59:06 · 179 阅读 · 0 评论 -
Object的wait和notify&为什么要先获取锁,才能调用wait/notify&虚假唤醒
public class Object{ /** 调用对象的此方法,会让当前线程等待,直到另外一个线程(必须先获得该对象的锁), 调用了该对象的notify方法或者notifyAll通知方法或者指定的时间到了 * Causes the current thread to wait until either another thread invokes the * {@link java.lang.Object#notify()} method原创 2021-08-24 18:15:41 · 260 阅读 · 0 评论 -
Happens-Before原则的通俗理解
指令重排&happens-before 原则 & 内存屏障:https://www.cnblogs.com/ITPower/p/13580691.htmlJava内存模型:https://www.cnblogs.com/yuanfy008/p/9252555.html原创 2021-08-31 15:11:08 · 2472 阅读 · 0 评论 -
Unsafe学习
概述概述Unsafe 对象提供了==非常底层的,操作内存、线程==的方法,Unsafe 对象不能直接调用,只能通过反射获得 .cas、LockSupport、Park&Unpark、原子引用类 都是使用Unsafe类中的方法。获取Unsafe对象可以看下Unsafe的源码,它持有一个私有的静态final域:theUnsafe。这个Unsafe类里面的静态代码块中,给theUnsafe赋了值。我们可以使用下面这个类来获取Unsafe对象。public class UnsafeAcc原创 2021-02-14 23:58:09 · 179 阅读 · 0 评论 -
线程池学习Note
任务队列package com.zzhua.test23;import java.util.ArrayDeque;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;// 注意一下这个ReentrantLock的从条件变量中唤醒,之前没有正确理解// 现在的理解是:原创 2021-02-16 17:17:06 · 1148 阅读 · 8 评论 -
任务调度线程池
8.任务调度线程池任务调度有两种:一种是延时执行一个任务(这个任务执行完了,这个任务就结束了);一种是定时执行一个任务(这个任务按照指定的时间间隔重复运行)Timer在『任务调度线程池』功能加入之前,可以使用 java.util.Timer 来实现定时功能,Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务Timer使用实例@Slf4jpublic cla原创 2021-02-18 09:56:46 · 649 阅读 · 0 评论 -
AQS 原理
1.* AQS 原理1.概述全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的==同步器类==工具的框架 (其它同步器工具类继承它,重用它的功能)特点:用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetState - cas 机制设置 state 状态独占模式是只有一个线程能够访问资原创 2021-02-22 23:37:02 · 202 阅读 · 0 评论 -
【Executor和AQS学习收藏】
【代码】【Executor和AQS学习】原创 2023-02-23 21:04:49 · 530 阅读 · 0 评论 -
Park&UnPark
基本使用它们是 LockSupport 类中的方法// 暂停当前线程LockSupport.park();// 恢复某个线程的运行LockSupport.unpark(暂停线程对象)先 park 再 unpark@Slf4jpublic class ParkTest { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(()原创 2021-01-24 17:37:26 · 192 阅读 · 0 评论 -
LockSupport#park与打断
如果调用interrupt()方法,则颁发一次许可证,通过清空中断标记,可以预测park()第一次会消耗许可证,不会成功,第2次成功park(),控制台只输出第一次park()小结:aqs使用interrupted()清空打断标记的目的是,如果后续被unpark()唤醒,但没获取到节点,能够park()住原创 2022-12-05 22:25:40 · 287 阅读 · 0 评论 -
LockSupport的使用(细节拉满)
permit的最大值是1,最小值是0,当调用park()方法时,如果permit为1,则减为0,继续执行。同理,unpark()方法会消耗一个许可,如果permit的值为0,则增加为1,代表发放许可,如果permit的值已经为1,则不在增加,也就是多次方法许可,并不会累加。其次,注意:某个线程可以先被unpark(这时,该线程就获得了一个许可),然后这个线程调用LockSupport.park()时,此时,发现有许可可用,则使用此许可而不会阻塞。,它是创建锁和其他同步组件的基础工具,内部是。原创 2022-11-28 22:27:42 · 1210 阅读 · 0 评论