随笔分类 -  JDK

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