深入ArrayList看fast-fail机制 发表于 2019-04-10 | 分类于 JavaSE fail-fast机制简介什么是fail-fastfail-fast 机制是java集合(Collection)中的一种错误机制。它只能被用来检测错误,因为JDK并不保证fail-fast机制一定会发生。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程 ... 阅读全文 »
ArrayList源码阅读 发表于 2019-04-02 | 分类于 JavaSE 简介 数据结构:基于数组,能够动态到地增加或减小其大小,当也可以调用ensureCapacity方法来进行人工地增加ArrayList的容量,从而避免再分配的消耗时间,前提是事先知道需要存储很多内容。 继承关系:继承自AbstractList,实现了List、RandomAccess、Clonea ... 阅读全文 »
synchronized详解 发表于 2019-03-28 | 分类于 Java并发 一、synchronized的使用1.synchronized的形式Java中每一个对象都可以作为锁,具体表现为以下三种形式: 对于普通同步方法,锁是当前实例对象; 对于静态同步方法,锁是当前类的class对象; 对于同步方法块,锁是括号里面的对象。 2.synchronized使用的注意点 锁 ... 阅读全文 »
Java并发之线程池的使用 发表于 2019-03-18 | 分类于 Java并发 无限制创建线程的不足 线程生命周期的开销非常高 线程的创建与销毁并不是没有代价的。根据平台的不同, 实际的开销也有所不同, 但线程的创建过程都会需要时间, 延迟处理的请求, 并且需要JVM和操作系统提供一些辅助操作。 资源消耗 活跃的线程会消耗系统资源, 尤其是内存。如果可运行的线程数量 ... 阅读全文 »
Java并发之基础构建模块:同步容器、并发容器、阻塞队列、同步工具类 发表于 2019-02-27 | 分类于 Java并发 一、同步容器类常见的同步容器 ArrayList -> Vecotr HashMap -> Hashtable Collections.synchronizedXXX 同步容器并不是在任何情况下都能线程安全 导致混乱结果的符合操作 123456789public static Obj ... 阅读全文 »
Java并发之对象的共享 发表于 2019-02-26 | 分类于 Java并发 一、可见性非原子的64位操作 对于非volatile类型的long和double变量,JVM允许将来64位的读操作或写操作分解为两个32位的操作,如果该变量的读操作和写操作在不同的线程中执行,那么很可能会读取到某个值的高32位和另一个值的低32位 在多线程中使用共享且可变的long和double等类 ... 阅读全文 »
Java并发之对象的组合 发表于 2019-02-25 | 分类于 Java并发 一、设计线程安全的类 设计线程安全类的过程中,需要包含以下三个基本要素: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问管理策略 同步策略定义了如何在不违背对象不变性条件或后验条件的情况下对其状态的访问操作进行协同.同步策略规定了如何将不可变性,线程封闭与加 ... 阅读全文 »
单例模式的几种写法对比 发表于 2019-02-15 | 分类于 设计模式 懒汉模式1. 最简单的懒汉模式线程不安全,不推荐12345678910111213public class Singleton { private Singleton() {} private static Singleton instance = null ... 阅读全文 »
深入理解Java虚拟机之Java内存区域 发表于 2018-12-07 | 分类于 深入理解java虚拟机 运行时数据内存线程私有的内存区域 每条线程都有,各线程之间互不影响,独立存储的一类内存区域 程序计数器: 可以看成是当前线程所执行的字节码的行号指示器 Java虚拟机栈: 生命周期与线程相同,描述的是Java方法执行的内存模型:每个方法子执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动 ... 阅读全文 »
深入理解Java虚拟机之Class类文件结构 发表于 2018-12-07 | 分类于 深入理解java虚拟机 Class文件十一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,当遇到需要占用8位字节以上的空间的数据项时,按照 高位在前(最高位字节在地址最低位)的方式分割成若干个8为字节进行存储 Class文件格式: 1. 魔数与Class文件的版本 每个Clas ... 阅读全文 »