CountDownLatch第一种用法 /** * 看大夫任务 */ public class SeeDoctorTask implements Runnable { private CountDownLatch countDownLatch; public SeeDoctor
jdk1.8,ConcurrentHashMap源码分析 初始化及使用 private static Map<Integer,Integer> map1 = new ConcurrentHashMap<>(); map1.put(1,1); new里做了啥? 啥都没干 public Concurre
以ArrayBlockingQueue为例,使用如下 int BOUND = 10;//阻塞队列容量 BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(BOUND); queue.put();//超过队列容量时则put()
关于park()阻塞线程的唤醒方式 Park阻塞线程唤醒有两种方式: 1、中断 2、unlock->release()->unpark() 中断唤醒: interrupt()存在的意义 早期停止线程的方式是Thread里有个native的方法stop0(),相当于linux里的kill -9,会产生
一、sleep方法 线程释放CPU进入休眠,但不会释放锁(synchronized),释放CPU,不释放锁 这里面有个比较经典的用法,代码中循环太快,导致年轻代的GC频繁或者GC时间久,可以通过Thread.sleep(0)释放CPU,让GC线程去执行回收 经典用法:线程批任务导致cpu占比很高,通
对象头组成 32位虚拟机对象头markword 64位虚拟机对象头markword 现在我们虚拟机基本是64位的,而64位的对象头有点浪费空间,JVM默认会开启指针压缩,所以基本上也是按32