随笔分类 - JDK
摘要:/** * Returns an {@code int} value with at most a single one-bit, in the * position of the highest-order ("leftmost") one-bit in ...
阅读全文
摘要:1. 概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现...
阅读全文
摘要:0. 前言Unsafe类可以为我们提供高效并且线程安全方式操作变量,直接和内存数据打交道。1. 获取Unsafe实体的方法private static Unsafe getUnsafeInstance() throws SecurityException, ...
阅读全文
摘要:0. 前言与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的。在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(...
阅读全文
摘要:1. 线程不安全的HashMap本节的代码均基于JDK 1.7.0_67HashMap是非线程安全的,HashMap的线程不安全主要体现在resize时的死循环及使用迭代器时的fast-fail上。1.1 HashMap工作原理1.1.1 HashMap寻址...
阅读全文
摘要:1. 摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等(8的ConcurrentHashMap也引入的红黑树)。 本文结合JDK1.7和...
阅读全文
摘要:Java 内存模型由于 ConcurrentHashMap 是建立在 Java 内存模型基础上的,为了更好的理解 ConcurrentHashMap,让我们首先来了解一下 Java 的内存模型。下面我们将分别介绍 Java 内存模型的重排序,内存可见性和 h...
阅读全文
摘要:1 引子public static void main(String[] args) { String[] sArray = {"a", "b", "c", "d", "e"}; List sList = Arrays.asList(sArray...
阅读全文
摘要:InheritableThreadLocal是ThreadLocal的子类。该类扩展了 ThreadLocal,为子线程提供从父线程那里继承的值:在创建子线程时,子线程会接收所有可继承的线程局部变量的初始值,以获得父线程所具有的值。通常,子线程的值与父线程的...
阅读全文
摘要:Skip list(跳表)是一种可以代替平衡树的数据结构,默认是按照Key值升序的。Skip list让已排序的数据分布在多层链表中,以0-1随机数决定一个数据的向上攀升与否,通过“空间来换取时间”的一个算法,在每个节点中增加了向前的指 针,在插入、删除、查...
阅读全文
摘要:0. 引言在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。 8种基本类型的常量池都是系统协调的,String类型的常量池比较特...
阅读全文
摘要:1.相关概念 1.1 什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。 1.2 Class文件中的常量池在Class文件结构中,最头的4个字节用于存储魔数Magic ...
阅读全文
摘要:1. 简介HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMa...
阅读全文
摘要:CAS算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化。比如说一个线程one从内存位置V中取出A,这时候另一个线程two也从内存中取出A,并且two进行了一些操作变成了B,然后two又将V位置的数据变成A,这时候...
阅读全文
摘要:引言独占锁:是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁:每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。在JDK 5之前Java语言是靠synchronized关键...
阅读全文
摘要:我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。线程池可以使得线程可以复用,就是执行完一个...
阅读全文
摘要:1.List 1.1 ArrayList以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组。因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。按数组下标访问元素-get(i)...
阅读全文

浙公网安备 33010602011771号