JAVA
请叫我司马懿
这个作者很懒,什么都没留下…
展开
-
快速失败 (fail-fast) 和安全失败 (fail-safe)
在上篇文章中有写到ArrayList 和Vector,期间在Add 方法中有出现modCount 变量,这个变量继承与AbstractList,解释为记录list 修改的次数,对于其理解不是太深入,因此特意记录一下。 1、快速失败: 是指在多线程访问情况下,使用迭代器遍历集合数据时,其他线程对集合有进行了修改,此时则会抛出 Concurrent Modification Exception异常...原创 2019-06-25 21:46:27 · 234 阅读 · 1 评论 -
Set如何保证不重复
java集合类中,Set与其他集合类的区别之一就是保证元素的不重复性,无序,原理是什么呢?本文以HashSet 为例,具体说明: 首先是HasHSet 的构造方法: public HashSet() { map = new HashMap<>(); } 可以看到,hashSet 实际上就是封装了HashMap,其他的构造方法也是分别调用hashMap的...原创 2019-06-27 15:32:21 · 1735 阅读 · 0 评论 -
java 集合类之ArrayList、LinkedList 和Vector
今天和朋友聊天,谈到java中的集合类问题,对于其中的用法和特点有些遗忘的地方,再次梳理和记录下。首先是常用的ArrayList 和Vector。(java 8),狭义(不包含Map)集合类UML 图: 联系和区别: ArrayList 和Vector 都继承了AbstractList,而和LinkedList 同时实现了List 接口,因此具有List的一些特点,比如底层都是用数组来存...原创 2019-06-25 16:22:04 · 136 阅读 · 0 评论 -
java集合类之HashMap
HashMap 是编码中常用的集合类之一,同时也是面试中常问的知识点,今天就跟踪源码(JAVA8)详细的介绍下: 特点: 1、实现了Map 接口,存储的数据结构是数组+链表的形式,java8之后为了提升效率,当链表长度达到一定阈值8时且数组长度大于最小转化容量64时,改为红黑树进行存储,当元素大于负载因子*容量时进行扩容,扩容为之前容量的2倍。 2、HashMap 是无序存储,有序列表如Li...原创 2019-06-27 23:29:11 · 247 阅读 · 1 评论 -
java 并发之 volatile
实例: 两个线程同时执行的情况下,执行i++ 操作,i初始化为1,得到的结果并非为3,而是2.过程为: 线程1和2 同时从主存中获取i 的值并写入缓存,在分别执行+1 操作,之后再分别写入主存,这时出现了最终主存的值为2的情况。这个是因为线程内操作对其他线程不可见,解决缓存一致性的方案有: 通过在总线加LOCK#锁的方式; 通过缓存一致性协议。 但是方案1的缺点是总线加锁会...原创 2019-08-25 16:31:18 · 198 阅读 · 0 评论 -
Java并发之ThreadLoacal
ThreadLoacal是什么? ThreadLocal是啥?以前面试别人时就喜欢问这个,有些伙伴喜欢把它和线程同步机制混为一谈,事实上ThreadLocal与线程同步无关。ThreadLocal虽然提供了一种解决多线程环境下成员变量的问题,但是它并不是解决多线程共享变量的问题。那么ThreadLocal到底是什么呢? API是这样介绍它的:This class provides thread...转载 2019-08-12 17:15:52 · 347 阅读 · 0 评论