01 2019 档案

摘要:为了保证同步的安全性,除了synchronized关键字,java并发包中java.util.concurrent.locks中的ReentrantLock和ReentrantReadWriteLock也是常用的锁实现。本篇从源码方面,分析一下重入锁ReentrantLock的原理。 先说一下什么的 阅读全文
posted @ 2019-01-30 22:57 阳光、大地和诗歌 阅读(1234) 评论(0) 推荐(0) 编辑
摘要:在并发编程中,synchronized关键字是常出现的角色。之前我们都称呼synchronized关键字为重量锁,但是在JDK1.6中对synchronized进行了优化,引入了偏向锁、轻量锁。本篇介绍synchronized关键字的使用方式,区别和偏向锁、轻量锁和重量锁实现原理。 先看看synch 阅读全文
posted @ 2019-01-29 22:23 阳光、大地和诗歌 阅读(534) 评论(0) 推荐(0) 编辑
摘要:volatile关键字经常用来修饰变量。不过,volatile本身很容易被误用。本篇就介绍一下volatile的原理和使用方式。 在介绍volatile关键字原理前,我们首先要了解JVM运行时的内存分配逻辑。 对于成员变量i,它存储在堆内存中。每个线程在运行时都会有一个自己的线程栈,线程如果要访问类 阅读全文
posted @ 2019-01-23 15:23 阳光、大地和诗歌 阅读(472) 评论(0) 推荐(0) 编辑
摘要:并发编程时,对于共享资源的使用需要确保绝对的安全性。除了利用锁机制之外,还有一种无锁的概念。所谓无锁,就是假定在并发情况下,对于共享资源的访问没有冲突,线程可以一直不停的运行,无需阻塞,如果产生冲突,则使用CAS算法确保安全性。Java在很多并发代码中都使用了这种算法。 CAS算法的核心参数如下: 阅读全文
posted @ 2019-01-22 23:03 阳光、大地和诗歌 阅读(731) 评论(0) 推荐(0) 编辑
摘要:ConcurrentHashMap和Hashtable都是线程安全的K-V型容器。本篇从源码入手,简要说明它们两者的实现原理和区别。 与HashMap类似,ConcurrentHashMap底层也是以数组+链表+红黑树实现的,以Node节点封装K-V和hash。 val和next以volatile关 阅读全文
posted @ 2019-01-21 21:23 阳光、大地和诗歌 阅读(330) 评论(0) 推荐(0) 编辑
摘要:HashSet为无序不可重复集合。底层几乎全部借助HashMap实现,比较简单。本篇简要分析一下HashSet源码。 首先是成员变量: 1、真正保存数据的HashMap实例 2、map实例的值 常用方法: 1、add() 从这个HashSet的add()方法中,可以看出。HashSet的不可重复,主 阅读全文
posted @ 2019-01-21 18:50 阳光、大地和诗歌 阅读(216) 评论(0) 推荐(0) 编辑
摘要:在JDK1.8中对HashMap的底层实现做了修改。本篇对HashMap源码从核心成员变量到常用方法进行分析。 HashMap数据结构如下: 先看成员变量: 1、底层存放数据的是Node<K,V>[]数组,数组初始化大小为16。 2、Node<K,V>[]数组最大容量 3、负载因子0.75。也就是如 阅读全文
posted @ 2019-01-21 18:28 阳光、大地和诗歌 阅读(295) 评论(0) 推荐(0) 编辑
摘要:LinkedList与ArrayList一样都是List接口的实现类,底层用双向链表实现。 LinkedList本身用一个内部类实现链表元素。 E item就是当前元素。next为下一个节点,prev为上一个节点。 主要方法分析: 1.add() 插入元素后,新建newNode节点,将newNode 阅读全文
posted @ 2019-01-17 11:31 阳光、大地和诗歌 阅读(134) 评论(0) 推荐(0) 编辑
摘要:ArrayList是开发常用的有序集合,底层为动态数组实现。可以插入null,并允许重复。 下面是源码中一些比较重要属性: 1、ArrayList默认大小10。 2、elementData就是真正存放数据的数组。elementData[]本身是动态的,并不是数组的全部空间都会使用,所以加上trans 阅读全文
posted @ 2019-01-17 10:44 阳光、大地和诗歌 阅读(286) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示