刘小水的个人博客 青墨书晚风

CountDownLatch和Semaphore的区别和底层原理

CountDownLatch第一种用法 /** * 看大夫任务 */ public class SeeDoctorTask implements Runnable { private CountDownLatch countDownLatch; public SeeDoctor

liuxiaoshui liuxiaoshui 发布于 2023-12-08

ConcurrentHashMap源码分析

jdk1.8,ConcurrentHashMap源码分析 初始化及使用 private static Map<Integer,Integer> map1 = new ConcurrentHashMap<>(); map1.put(1,1); new里做了啥? 啥都没干 public Concurre

liuxiaoshui liuxiaoshui 发布于 2023-11-30

AQS之BlockingQueue源码跟踪记录

以ArrayBlockingQueue为例,使用如下 int BOUND = 10;//阻塞队列容量 BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(BOUND); queue.put();//超过队列容量时则put()

liuxiaoshui liuxiaoshui 发布于 2023-11-26

ReentraintLock中park()和unpark()

关于park()阻塞线程的唤醒方式 Park阻塞线程唤醒有两种方式: 1、中断 2、unlock->release()->unpark() 中断唤醒: interrupt()存在的意义 早期停止线程的方式是Thread里有个native的方法stop0(),相当于linux里的kill -9,会产生

liuxiaoshui liuxiaoshui 发布于 2023-11-25

Thread之sleep、join、yield、wait、notify

一、sleep方法 线程释放CPU进入休眠,但不会释放锁(synchronized),释放CPU,不释放锁 这里面有个比较经典的用法,代码中循环太快,导致年轻代的GC频繁或者GC时间久,可以通过Thread.sleep(0)释放CPU,让GC线程去执行回收 经典用法:线程批任务导致cpu占比很高,通

liuxiaoshui liuxiaoshui 发布于 2023-11-23

java对象头锁状态分析及锁的升级记录

对象头组成 32位虚拟机对象头markword 64位虚拟机对象头markword 现在我们虚拟机基本是64位的,而64位的对象头有点浪费空间,JVM默认会开启指针压缩,所以基本上也是按32

liuxiaoshui liuxiaoshui 发布于 2023-11-23