Java
猕猴桃爱吃猕猴桃
这个作者很懒,什么都没留下…
展开
-
List和Set
目录一、List和Set比较二、List 1、ArrayList2、LinkedList 三、Set一、List和Set比较List和Set对比 List Set 基于数组或者双链表实现 基于map实现 允许重复元素 不允许重复元素 支持FailFast机制 非线程安全 二、List ArrayList和LinkedList是...原创 2019-01-23 20:54:42 · 170 阅读 · 0 评论 -
Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)
一、重量级锁 上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchron...转载 2019-03-10 20:10:26 · 91 阅读 · 0 评论 -
Java对象头
一、Java对象头介绍HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。HotSpot虚拟机的对象头(Object Header)包括两部分信息,第一部分用于存储对象自身的运行时数据, 如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等...转载 2019-03-10 19:53:44 · 135 阅读 · 0 评论 -
JDK1.8 ConcurrentHashMap扩容实现原理
1.8中的concurrentHashMap扩容机制是无锁并发的,即支持多线程同时来对旧哈希数组扩容。那么它怎么保证在多线程场景下的线程安全呢?具体分析: private final void transfer(Node<K,V>[] tab, Node<K,V>[] nextTab) { //计算stride,与运行环境CPU个数有关,至少是16 ...原创 2019-02-20 22:12:12 · 2019 阅读 · 0 评论 -
volatile
目录一、volatile的特性二、volatile的内存语义三、volatile实现原理Java并发有三大特性:1)可见性,即一个线程中对共享变量操作的结果对另一个线程看见;2)有序性,多线程环境下执行的结果与顺序执行的结果一致;3)原子性,即一组操作要么全部执行完毕,要么都不执行。为了保证多线程环境下,对共享变量的访问不存在竞争,需要通过同步来保证线程在访问共享变量时是顺序执...原创 2019-01-30 22:26:36 · 199 阅读 · 0 评论 -
Java并发体系
并发是Java中最重要又比较有难度的内容,想要掌握这部分内容需要很大的功夫。Java并发体系主要包括7部分内容,如下图所示。后续将深入学习探讨这些内容。Java并发体系...原创 2019-01-30 21:12:23 · 197 阅读 · 0 评论 -
Java并发编程:synchronized及其实现原理
一、synchronized的基本使用 synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,synchronized总共有三种用法: (1)修饰普通方法 (2)修饰静态方法 (3)修饰代码块...转载 2019-03-10 20:04:30 · 94 阅读 · 0 评论 -
FailFast机制
目录FailFast机制的定义FailFast机制的定义Java中对非线程安全的容器的迭代器进行了限制。JDK中具体描述如下:structurally modified at any time after the iterator is * created, in any way except through the iterator's own * {remove()} ...原创 2019-01-16 21:20:37 · 206 阅读 · 0 评论 -
深拷贝与浅拷贝
目录一、clone的条件二、浅拷贝和深拷贝 三、如何实现浅拷贝和深拷贝Object基类中声明了一个clone()方法,用于实现对象的拷贝。在Java中,所有对象都是Object的子类,因此,都可以通过clone()方法创建新的类型实例。但是Object类中的clone()方法声明为protected,不能直接调用。子类要调用Object类中的clone()方法通常是重写clone(...原创 2019-01-16 21:04:09 · 116 阅读 · 0 评论 -
包装类型
目录一、体系二、内部实现原理一、体系包装类型对应8种基本数据类型:byte、short、int、long、float、double、char、boolean。其中,除了Boolean与Character类型之外,其余6种类型都继承了Number。 二、内部实现原理JDK推荐使用valueOf方法初始化对应包装类型。包装类型内部分别封装了对应基本类型的域用以存储...原创 2019-01-14 22:52:36 · 146 阅读 · 0 评论 -
foreach原理
目录一、foreach的作用二、foreach实现原理一、foreach的作用遍历容器或者数组中的元素。从学C语言开始,我们知道可以用循环获取容器中的所有元素,后来接触Java,知道还可以用迭代器获取容器中的所有元素,foreach也是一种遍历容器所有元素的方法。那么foreach是怎么实现的呢?二、foreach实现原理看一个简单的例子:public stati...原创 2019-01-14 22:26:21 · 1213 阅读 · 0 评论 -
Java中三大常用容器体系
目录一、Java中三种容器区别二、容器体系一、Java中三种容器区别Java中的容器类型包括:List、Set和Map。三种容器的区别:Java中三大容器区别 List Set Map 可以存储重复元素 不可以存储重复元素 键值对方式存储,存储的键不能重复 基于数组或者链表实现 基于Map实现 基于哈希表或者红黑色实现 二、容器...原创 2019-01-19 17:12:07 · 2680 阅读 · 0 评论 -
Comparable和Comparator
目录一、Comparable二、Comparator Comparable和Comparator都表示对类型进行比较。但是Comparable表示的是某个类型本身具有比较的能力,而Comparator侧重于类型本身无比较能力,但是我们可以通过外部定义其可以通过某种规则进行比较。一、ComparableComparable是接口,位于java.lang包中。JDK中对Compar...原创 2019-01-19 16:11:48 · 354 阅读 · 0 评论 -
异常
目录一、异常体系二、Throwable三、Error四、ExceptionJava中,异常表示程序运行过程中发生的某种已知或者未知的不正确的行为。这种行为,会影响甚至终止程序的正确运行。在实际编程中,我们会遇到各种类型的异常,接下来由分四部分对异常进行简要的介绍。一、异常体系 在Java中,Throwable是所有异常的父类。根据UML图,我们可知,异常分为Err...原创 2019-01-13 22:33:59 · 168 阅读 · 0 评论 -
String、StringBuffer、StringBuilder
目录一、String二、StringBuffer与StringBuilder一、String1、特点:不可变2、内部实现原理:内部声明了一个char类型的数组,存储字符串内容。3、重要方法1)hashCode() public int hashCode() { int h = hash; if (h == 0 && ...原创 2019-01-13 21:24:50 · 89 阅读 · 0 评论 -
HashMap实现原理
目录一、hash函数实现二、HashMap内部哈希数组的长度为什么要取2的幂三、哈希数组的扩容1、什么时候触发扩容?2、扩容做什么事情?1)新hash数组初始化2)已存储键值对重新散列四、HashMap存储原理1、put操作1)hash数组索引位置为null2)索引位置第一个节点key与要存储的键值对key相等3)要存储的位置已经是树节点4)普通...原创 2019-01-27 22:10:04 · 813 阅读 · 0 评论 -
线程池
通过一个简单的例子说明线程池的基本原理与ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue的差异。package com.larry.learning.threadpool;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.B...原创 2019-08-11 13:31:00 · 153 阅读 · 0 评论