2019年6月25日
摘要: 首先需要理解线程安全的两个方面:执行控制和内存可见。 执行控制的目的是控制代码执行(顺序)及是否可以并发执行。 内存可见控制的是线程执行结果在内存中对其它线程的可见性。根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存),操作完成后再把结果从线程本地刷到主存。 sy 阅读全文
posted @ 2019-06-25 22:51 smile2it 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 学习时正好碰到这两个方法,就查阅相关资料,并通过程序实现,进行区别一下: 1、每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。sleep()方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回 阅读全文
posted @ 2019-06-25 22:47 smile2it 阅读(268) 评论(0) 推荐(0) 编辑
摘要: HashMap 和 HashSet 都是 collection 框架的一部分,它们让我们能够使用对象的集合。collection 框架有自己的接口和实现,主要分为 Set 接口,List 接口和 Queue 接口。它们有各自的特点,Set 的集合里不允许对象有重复的值,List 允许有重复,它对集合 阅读全文
posted @ 2019-06-25 22:40 smile2it 阅读(535) 评论(0) 推荐(0) 编辑
摘要: LRU 缓存介绍 我们平时总会有一个电话本记录所有朋友的电话,但是,如果有朋友经常联系,那些朋友的电话号码不用翻电话本我们也能记住,但是,如果长时间没有联系了,要再次联系那位朋友的时候,我们又不得不求助电话本,但是,通过电话本查找还是很费时间的。但是,我们大脑能够记住的东西是一定的,我们只能记住自己 阅读全文
posted @ 2019-06-25 22:39 smile2it 阅读(259) 评论(0) 推荐(0) 编辑
摘要: Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来 阅读全文
posted @ 2019-06-25 22:33 smile2it 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 概述 我们在之前的博文中了解到关于 HashMap 和 Hashtable 这两种集合。其中 HashMap 是非线程安全的,当我们只有一个线程在使用 HashMap 的时候,自然不会有问题,但如果涉及到多个线程,并且有读有写的过程中,HashMap 就不能满足我们的需要了(fail-fast)。在 阅读全文
posted @ 2019-06-25 22:07 smile2it 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 概述 LinkedList 和 ArrayList 一样,都实现了 List 接口,但其内部的数据结构有本质的不同。LinkedList 是基于链表实现的(通过名字也能区分开来),所以它的插入和删除操作比 ArrayList 更加高效。但也是由于其为基于链表的,所以随机访问的效率要比 ArrayLi 阅读全文
posted @ 2019-06-25 22:05 smile2it 阅读(870) 评论(0) 推荐(0) 编辑
摘要: LinkedHashSet 概述 思考了好久,到底要不要总结 LinkedHashSet 的内容 = = 我在之前的博文中,分别写了 HashMap 和 HashSet,然后我们可以看到 HashSet 的方法基本上都是基于 HashMap 来实现的,说白了,HashSet内部的数据结构就是一个 H 阅读全文
posted @ 2019-06-25 22:04 smile2it 阅读(4988) 评论(0) 推荐(0) 编辑
摘要: ArrayList 概述 ArrayList 可以理解为动态数组,用 MSDN 中的说法,就是 Array 的复杂版本。与 Java 中的数组相比,它的容量能动态增长。ArrayList 是 List 接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 Li 阅读全文
posted @ 2019-06-25 22:04 smile2it 阅读(165) 评论(0) 推荐(0) 编辑
摘要: LinkedHashMap 概述 HashMap 是无序的,HashMap 在 put 的时候是根据 key 的 hashcode 进行 hash 然后放入对应的地方。所以在按照一定顺序 put 进 HashMap 中,然后遍历出 HashMap 的顺序跟 put 的顺序不同(除非在 put 的时候 阅读全文
posted @ 2019-06-25 22:03 smile2it 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 概述 和 HashMap 一样,Hashtable 也是一个散列表,它存储的内容是键值对。 Hashtable 在 Java 中的定义为: 从源码中,我们可以看出,Hashtable 继承于 Dictionary 类,实现了 Map, Cloneable, java.io.Serializable接 阅读全文
posted @ 2019-06-25 22:02 smile2it 阅读(817) 评论(0) 推荐(0) 编辑
摘要: HashSet 概述 对于 HashSet 而言,它是基于 HashMap 实现的,底层采用 HashMap 来保存元素,所以如果对 HashMap 比较熟悉了,那么学习 HashSet 也是很轻松的。 我们先通过 HashSet 最简单的构造函数和几个成员变量来看一下,证明咱们上边说的,其底层是 阅读全文
posted @ 2019-06-25 22:01 smile2it 阅读(735) 评论(0) 推荐(0) 编辑
摘要: HashMap 概述 HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能 阅读全文
posted @ 2019-06-25 21:44 smile2it 阅读(223) 评论(0) 推荐(0) 编辑