- 博客(7)
- 收藏
- 关注
原创 《java并发编程实践》读书笔记第四章
关键知识 设计线程安全的类 设计线程安全的类的过程应该包括下面3个基本要素: 1.确保对象状态是由哪些变量构成的 2.确定限制状态变量的不变约束。 3.制定一个管理并发访问对象状态的策略。 对象的状态首先要从它的域说起: 一个对象有n个基本域,它的状态就是域值组成的n元组。如果一个对象的域引用了其他对象,那么它的状态同时也包含了被引用对象的域。 同步策略定义了对象如何协调对其状态的访...
2019-06-13 14:35:19
190
原创 《java并发编程实践》读书笔记第三章
关键知识 编写正确的并发程序的关键在于对共享的、可变的状态进行访问管理。 可见性 定义:可见性是指内存可见性,当一个线程修改了对象的状态后,其他的线程能够真正看到改变。 重排序来看一段代码 public class NoVisibility{ private static boolean ready; private static int number; private stati...
2019-06-10 12:08:25
157
原创 java并发编程实践读书笔记——第一章、第二章
关键知识 线程允许程序控制流的多重分支同时存在于一个进程。他们共享进程范围内的资源,比如内存和文件句柄,但是每个线程都有自己的程序计数器、栈和本地变量。线程有时候也被叫做轻量级进程,并且现在大多数操作系统把线程作为时序调度的基本单元。 线程的优点: 线程在服务器应用中用于提高资源的利用率和吞吐量。 恰当的使用线程,可以降低开发以及维护的成本,并且能够提高复杂应用的性能。线程通过把异步的工作流程...
2019-06-06 19:59:51
207
原创 Java源码解析之TreeMap(jdk1.8)上篇
前言 今天我们要来啃Map体系中的硬骨头了TreeMap。这个名字听着好熟悉,是的我们在介绍HashMap的时候说过,当链表的长度大于8的时候,链表将会被转换为一个TreeNode。TreeNode使用红黑树的方式来组织数据,TreeMap同理。在我们介绍TreeMap之前,我认为我们有必要彻底的了解一下什么是红黑树:其实它是一种特殊的二叉树,能够提供最坏情况下遍历树的时间——O(logn),而链...
2019-03-25 01:31:52
556
原创 java源码解析之Hashtable(jdk1.8)
前言 前面两篇我们介绍了HashMap和LinkedHashMap。HashMap是jdk中最常用的哈希表实现,使用数组加链表的结构来组织数据,扩容操作会将之前的键值对顺序打乱。为了解决这个问题,jdk提供了LinkedHashMap。通过重写内部类Entry,新增两个成员属性LinkedHashMap.Entry类型的after和before,使所有的键值对序列都包含在一个双向链表上,并且不会受...
2019-03-23 13:39:37
606
原创 LinkedHashMap源码解析jdk1.8
前言 上一篇我们分析了HashMap在jdk1.8中的实现。我们知道了HashMap在实际操作中并不会保证键值对的有序。所以针对这一问题jdk提供了LinkedHashMap来实现有序的哈希表。因为是解析所以我们尽量做到详尽,下面对源码类申明语句之前的英文注释做个翻译: 1.LinkedHashMap是Map接口有序的哈希表的实现,它的迭代顺序是可以预测的。他与HashMap的区别是它维护着一个贯...
2019-03-22 11:15:32
360
原创 深入HashMap的世界HashMap源碼解析
深入HashMap的世界HashMap源碼解析 HashMap在Java集合框架中有举足轻重的地位,提供了哈希表在jdk中的实现。散列算法的出现使得数据的检索更加快速。何为散列不懂得可以自行百度 HashMap允许null值和null键的存在,大体上类似于HashTable(除了他不是线程安全和允许null的存在),HashMap并不保证map的有序。 HashMap对于基本的put和get方法...
2019-02-24 20:48:56
146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人