摘要: 原子性,可见性与有序性 在多线程中,线程同步的时候一般需要考虑原子性,可见性与有序性 原子性 原子性定义:一个操作或者多个操作在执行过程中要么全部执行完成,要么全部都不执行,不存在执行一部分的情况。 以我们在Java代码中经常用到的自增操作 为例, 实际上并不是一步操作,而是首先对i的值加一,然后将 阅读全文
posted @ 2018-11-25 16:06 宁愿呢 阅读(1185) 评论(0) 推荐(0) 编辑
摘要: 常用API method | 注释 | | 方法是我们创建线程时必须要实现的方法,但是实际上该方法只是一个普通方法,直接调用并没有开启线程的作用。 | 方法作用为使该线程开始执行;Java虚拟机调用该线程的 run 方法。 但是该方法只能调用一次,如果线程已经启动将会抛出 异常。 | 方法让出CPU 阅读全文
posted @ 2018-11-18 20:35 宁愿呢 阅读(834) 评论(0) 推荐(0) 编辑
摘要: 进程与线程 进程 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位,比如我们windows电脑上运行的一个程序就是一个进程。在传统进程中进程是资源分配和调度的一个基本单位,在后来引入线程概念后,进程就变成了资源分配的基本单位但不是调度的基本单位。 为什么要有线程 在说线程前,总结下进 阅读全文
posted @ 2018-11-17 18:13 宁愿呢 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 在JDK1.7及以前中,如果在并发环境中使用HashMap保存数据,有可能会产生死循环的问题,造成cpu的使用率飙升。之所以会发生该问题,实际上就是因为HashMap中的扩容问题。 HashMap的实现实际上是一个数组+链表的实现(JDK1.8中当链表长度达到一定值会转化为红黑树),当HashMap 阅读全文
posted @ 2018-11-06 17:23 宁愿呢 阅读(1709) 评论(0) 推荐(1) 编辑
摘要: 常用方法 hash(key) 该方法中返回的值是将得到的hash值(传入的值的hashCode方法)的高16位与低16位进行异或操作。这样做的目的在于减少hash之间的碰撞。具体可看这篇: "为什么hash将高16位与低16位进行异或操作" V put(K key, V value) 参数: has 阅读全文
posted @ 2018-11-06 17:01 宁愿呢 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 构造函数 变量解释 1. capacity,表示的是hashmap中桶的数量,初始化容量initCapacity为16,第一次扩容会扩到64,之后每次扩容都是之前容量的2倍,所以容量每次都是2的次幂 2. loadFactor,负载因子,衡量hashmap一个满的程度,初始默认为0.75 3. th 阅读全文
posted @ 2018-11-05 16:43 宁愿呢 阅读(333) 评论(0) 推荐(0) 编辑