CountDownLatch

说明

CountDownLatch是在java1.5被引入,使一个线程等待其他线程各自执行完毕后再执行。

CountDownLatch是通过共享锁实现的。在创建CountDownLatch中时,会传递一个int类型参数count,该参数是“锁计数器”的初始状态。
当某线程调用该CountDownLatch对象的await()方法时,该线程会等待“共享锁”可用时,
才能获取共享锁进而继续运行。而“共享锁”可用的条件,就是锁计数器的值为0!而锁计数器的初始值为count,
每当一个线程调用该CountDownLatch对象的countDown()方法时,锁计数器减1;直到锁计数器为0时,前面的等待线程才能继续运行!

使用场景

Read More

ReentrantLock

概述

ReentrantLock是重入锁。它实现了Lock接口,是基于AQS(一种用于构建同步器的框架)构造出来的一种同步器。

与synchronized相比增加了一些高级功能, 主要有以下三项:等待可中断、可实现公平锁、锁可以绑定多个条件。

内存分配策略

JVM栈帧及方法调用详解

JMM、Java Memory Model

对象优先在Edenf分配

大对象直接进入老年代

长期存活的对象将进入老年代

动态对象年龄判定

空间分配担保

垃圾回收机制

对象存活

GC算法

运行时数据区

可达性分析与引用计数

引用计数法

给对象增加一个引用计数器,每当有一个地方引用它时,计数器就+1;当引用失效时,计数器就-1;任何时刻计数器为 0 的对象就是不能再被使用的,即对象已“死”。
在主流的 JVM 中没有选用引用计数法来管理内存,最主要的原因是引用计数法无法解决对象的循环引用问题。

可达性分析算法

通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为“引用链”,当一个对象到 GC Roots 没有任 何的引用链相连
时(从 GC Roots 到这个对象不可达)时,证明此对象不可用。以下图为例:

Read More

集合知识点总结


通过迭代器fail-fast属性,你明白了什么?

每次我们尝试获取下一个元素的时候,Iterator fail- fast属性检查当前集合结构里的任何改动。如果发现任何改动,它抛出 ConcurrentModificationException。
Collection中所有Iterator的实现都是按fail-fast来设计的(ConcurrentHashMap和CopyOnWriteArrayList这类并发集合类除外)


fail-fast与fail-safe有什么区别?

Read More