
Java核心类、集合类、多线程类
Java核心类、集合类、多线程类相关
wabinog
中国民航信息网络股份【2008 - 2014】
国家信息技术安全研究中心【2014 - Now】
从业民航信息化、信息安全领域,核心程序员,擅长大数据、JAVA后端、多线程高并发、JVM调优、网络编程、REDIS、ORACLE......持PMP 、NPDP证书。
展开
-
JAVA - EnumMap与EnumSet简单总结
EnumMap实现Map接口,基于数组实现,用于存储key为枚举类型的键值对集合类。其中K,V 使用双数组实现。Key为枚举类型。在枚举中,每个枚举对象对应一个ordinal唯一值,因此在寻址时候,可使用ordinal作为数组下标进行寻址,速度很快。效率比HashMap要高,且大多数基本操作是常数级。多线程不安全,可使用synchronizedMap包装器 支持多线程安全。集合内部的key按自然序排列,Key不能插入空。使用集合视图的迭代器迭代元素时,如果Map被其他线程修改了。不会抛出Co原创 2020-08-31 09:25:42 · 443 阅读 · 0 评论 -
JAVA - TreeMap与TreeSet
TreeMap线程不安全,基于红黑树实现的有序集合。集合顺序默认为自然排序,也可以自定义比较器实现排序规则。实现NavigableMap接口,实现一些了系列导航定位方法。集合操作开销在 O(LogN)【containkey\get\put\remove】。Get方法过程使用key在红黑树中进行遍历查找,如果Key小于树节点中的key值,则进入左子树继续查找。Key大于树节点中的key值则进入右子树查找,直到找到为止。Put方法过程如果Root节点为空,则插入的kv对,保存在Roo原创 2020-08-31 09:21:09 · 239 阅读 · 0 评论 -
JAVA - LinkedHashMap特点及小结
LinkedHashMap继承自HashMap的,多线程不安全的、用于存储K、V键值对的,有序集合类。在HashMap基础上,对存储的元素节点添加了前后指针、额外维护了一个双向链表维持顺序。由于增加了前后指针,当进行Put、Get、Replace等操作时,会有维护双向链表的额外开销。使用迭代器遍历时比HM要快。使用场景是:当设定为按访问顺序存储时,适合做LRU缓存。特点LinkedHM的存储单元类型使用Entry类作为存储类,继承自HashMap的Node类.Entry类添加了before原创 2020-08-31 09:15:57 · 1048 阅读 · 0 评论 -
JAVA - HashTable特点及小结
HashTableJDK1.0引入,实现Map接口,用于存储K,V键值对的集合类。主要特点:Key不可为空、多线程安全、无序。底层采用数组 + 链表 的结构。特点在源码基础上,查阅并结合其他文章资料,以介绍+提问的形式,列出HashTable以下常见特点若干项。HashTable的存储单元类型使用Entry类型的对象来保存内容。Entry类型中包括hash、key、value、next四部分。HashTable的存储结构存储结构中使用了数组、单链表,其中单链表是用来处理哈希冲突时用的原创 2020-08-24 09:59:22 · 1061 阅读 · 1 评论 -
JAVA - HashMap特点及小结
HashMapHashMap实现了Map接口,用于存储K,V键值对的集合类。主要特征包括:Key可存NULL、无序、线程不安全、 底层使用了数组+链表+红黑树的结构。特点在阅读源码基础上,查阅并结合其他文章资料,以介绍+提问的形式,列出HashMap以下常见特点若干项。HashMap存储单元类型。hashMap内部使用Node类型对象来保存内容。Node类型中包括hash、key、value、next四部分。HashMap的存储结构。HashMap的存储结构中使用了Node类型的数原创 2020-08-24 09:39:39 · 1390 阅读 · 0 评论 -
Java - Atomic类简单小结
背景JAVA中Atomic家族中类型众多,这里列举了一些有代表性的,并对典型的类做简单小结,包括:AtomicInteger/AtomicLongAtomicIntegerArrayAtomicBooleanAtomicReferenceAtomicStampedReference对于上述Atomic家族原子类,共性有:原子性:采用CAS无锁算法,线程互斥访问,多线程安全。可见性:凡是做CAS的变量,必使用Volatile语法,提供可见性支撑。有序性:利用Volatile语法的禁止原创 2020-07-03 11:50:03 · 324 阅读 · 0 评论 -
JAVA - LIST接口类简单小结
LIST接口类JAVA中LIST接口类主要包括Vector、ArrayList、Stack、LinkedList、CopyOnWriteArrayList类。底层可用数据或链表【实现算法基础结构】实现。相关接口有RandomAccess、Cloneable、Serializable、Deque。List接口特点实现List接口,通过迭代器可双向顺序遍历数据。【每个线程可以获取自己的迭代器对象,多个线程间的迭代器彼此间不干扰!】迭代器不支持并发修改,使用fail-fast策略快速失败。【一旦修原创 2020-08-17 10:45:36 · 146 阅读 · 0 评论 -
JAVA - MCS、CLH、自旋锁小结及简单性能对比
CLH队列锁CLH队列锁是一种高性能、公平的自旋锁。 当多线程竞争一把锁时,获取不到锁的线程,会排队进入CLH队列的队尾,然后自旋等待,直到其前驱线程释放锁。特点:没有惊群效应。假设有1000个线程等待获取锁,锁释放后,只会通知队列中的第一个线程去竞争锁,避免了同时唤醒大量线程 在瞬间争抢CPU资源,避免了惊群效应。CLH队列锁的长处是空间复杂度低(假设有n个线程。L个锁,每一个线程每次仅仅获取一个锁,那么须要的存储空间是O(L+n),n个线程有n个myNode。L个锁有L个tail)。原创 2020-08-10 10:11:25 · 694 阅读 · 0 评论 -
JAVA - 四种引用
前言Java中的具有代表性的四种引用有强引用、软引用、弱引用、虚引用。其中软引用、弱引用、虚引用继承自抽象类Reference。对于上面四种引用,只要引用置为空,遭遇GC必回收【废话】。GC时,如果你的类实例中重写了Finalize函数,则会触发该函数,当然一般情况下是不推荐重写该函数的。强引用JAVA中引用类型默认使用的就是强引用。只要强引用指向的不是NULL,GC通过跟可达算法判断该引用指向的对象还在使用中,对象就不会被回收。当对象不再使用时,可将强引用置为空,帮助GC回收。【一般情原创 2020-08-01 14:49:20 · 281 阅读 · 0 评论 -
JAVA - ThreadLocal 相关小结
ThreadLocalThreadLocal称为线程局部变量。每个线程独有的一块ThreadLocalMap空间,用来存储数据,不同线程间的ThreadLocalMap中数据是隔离的。ThreadLocalMap是个数组结构,由若干个Entry元素组成,初始大小为16。一个Entry中 包括key 和value两部分。Key为弱引用类型,存储ThreadLocal的hashcode为键;value可存储任意对象。线程中多个ThreadLocal 代表了多个key,在ThreadLocalMap中对原创 2020-08-01 13:22:22 · 175 阅读 · 0 评论 -
Java - CountDownLatch和CyclicBarrier小结
背景这两JUC类适合放一起比较,随便写写,简单小结。CountDownLatch要点:底层采用AQS队列,源码很简单300行。使用:初始化对象并填入(计数器)值,例如:new CountDownLatch(3)。多线程执行完毕时,触发countdown方法将计数器值减1,当值为0时,主线程中被Latch拴住的代码开始执行。用法一:public class CountDownLatch_v1 { //计数器设为3 static CountDownLatch latch原创 2020-07-03 13:46:57 · 892 阅读 · 0 评论