![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
CJ_Geek
这个作者很懒,什么都没留下…
展开
-
Java LinkedHashMap
总结 LinkedHashMap就是对HashMap的扩展,它保留了HashMap的所有特性,里面维护了双向链表,使得HashMap里面的数据有顺序。 顺序: 插入顺序 和 访问顺序。取决于accessOrder 插入顺序 : accessOrder=false , 每次增加数据都会添加到双向链表的尾部 访问顺序 : accessOrder=true , 最新访问的数据都会调整到双向链表的尾部 源码参考 https://blog.csdn.net/u014634338/article/details/7原创 2020-05-10 18:27:09 · 113 阅读 · 0 评论 -
Thread.join()方法
1. 引言 对于这个方法,开发过程中使用的很少,一直都不明白其中的原理,今天看了下源码,一目了然了。 2. 源码 3. 案例 3.1 运行结果 JoinThread run方法执行了 main 执行完毕原创 2020-05-09 13:31:49 · 143 阅读 · 0 评论 -
CopyOnWriteArrayList
链接:https://blog.csdn.net/u010002184/article/details/90452918 总结: 1.读不加锁、写加锁、做到读写分离; 2.可以并发读; 3.只能保证数据的最终一致性,不能保证数据的实时一致性; 4.内存占用多,写的时候会拷贝一份数组。 ...原创 2020-01-20 14:18:18 · 189 阅读 · 0 评论 -
Java之CountDownLatch
简介 A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. 一种同步辅助,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。 API 1.void await() 除非线程是{@...原创 2019-08-20 19:40:19 · 115 阅读 · 0 评论 -
HashMap中根据hash值求得index的问题???
1.根据key求index的过程 // 先用key求得hash值 static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); } // 利用上述函数求取hash值后 然后(n-1)& hash int ...原创 2018-09-14 19:28:39 · 3149 阅读 · 0 评论 -
java中匿名内部类编译之后会生成什么
public class Stu{ interface A { void onTouch(); } public A setTouch() { return new A() { @Override public void onTouch() { } ...原创 2018-08-11 21:01:02 · 4501 阅读 · 0 评论 -
java中String对象的克隆
String 类型很特殊,它是不可变类型,即一旦初始化后,就不可以改变。因为他为引用型,而且他指向的值为常量,克隆出来的对象改变他的值 实际上是改变了克隆出来对象String类型成员的指向,不会影响被克隆对象的。 解释:如果原来对象的一个string变量进行初始化的时候,指向的是一个字符串常量,该字符串常量会被放到常量池中, 该string类型的引用将会指向该常量。进行克隆后,得到一个新的对...转载 2018-08-11 20:37:57 · 8383 阅读 · 3 评论 -
Java随机数Random
记录一个比较操蛋的问题 1、随机数是由随机种子根据一定的计算方法计算出来的结果。只要计算方法一定,随机种子一定,那么计算出来的结果就相同。 2、如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列 3、Random对象根据种子生成随机数,种子相同的Random对象,无论何时运行它,也无论它在那台机器上,生成的随机数序列都是相同的,种子不同的Random对象,生成...原创 2018-06-04 11:16:46 · 285 阅读 · 0 评论 -
java深拷贝与浅拷贝
1、浅拷贝 浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。 实现浅拷贝 public class Student implements Cloneable{ // 引用属性,浅拷...原创 2018-04-24 15:22:44 · 97 阅读 · 0 评论 -
ThreadLocal的工作原理
特点: ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储之后,只能在指定线程中可以获取到存储的数据。对于其他线程来说无法获取到数据。 使用场景: 一般来说,当某些数据是以线程为作用域并且不同线程具有不同数据副本的实现,就可以考虑采用ThreadLocal. (1) 场景1:对于Handler来说,它需要获取当前线程的Looper,很显然Loope...原创 2018-04-12 17:25:46 · 127 阅读 · 0 评论 -
java集合框架中有些类(ArrayList、HashMap)等包含有modCount是什么意思
1、modCount是记录修改次数,出现在集合类(线程不安全)中的增、删函数中。 这个modCount与线程安全有关系。 HashMap中的部分源码如下: private abstract class HashIterator<E> implements Iterator<E> { Entry<K,V> next; // ...原创 2018-04-04 23:44:20 · 1092 阅读 · 1 评论 -
HashMap实现原理(二)——多线程问题
本文的分析是基于jdk1.7源码 前奏:我们都知道,HashMap的初始容量是16,当HashMap中的值的size超过threshold时,会进行扩容操作;扩容会执行resize—>transfer方法 HashMap之所以线程不安全就是因为在resize(transfer)的时候会不安全。 resize(transfer)会执行如下操作,并将原hash表中的内容移动到新的hash表...原创 2018-04-04 18:30:04 · 236 阅读 · 0 评论 -
HashMap中实现原理分析(一)
JDK1.7中的HashMap (1) put(K key, V value) 原理 接下来分析:如果原table中没有要插入的value值,如何往table中插入元素addEntry(hash, key, value, i); 注:size–代表表中有多少元素。 threshold–阈值:表容量*加载因子 HashMap每次扩容是在原表的基础上增加一...原创 2018-04-04 14:56:27 · 115 阅读 · 0 评论 -
java内存模型
java内存模型的目的 屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能到达一致的内存访问效果。 主要目标 定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量与java中的变量有所不同。它包括实例字段、静态字段和构成数组对象的元素,但不包括局部变量和方法参数。 java内存模型规定了所有的变量都存储在主...原创 2018-03-30 17:53:35 · 128 阅读 · 0 评论 -
Java内存区域及内存分配
1、Java内存区域 (1)线程私有 虚拟机栈:主要是来描述java方法的内存模型。每个方法在执行时都会创建一个栈帧,用户存储局部变量表,操作数栈,动态链接,方法出口的信息。每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。 本地方法栈:为虚拟机使用到的Native方法服务 程序计数器:当前线程所执行的字节码的行号指示器 ...原创 2018-03-30 10:14:29 · 1436 阅读 · 0 评论 -
java中值传递与引用传递
**1、首先,java在向方法传递参数时传的不是引用,是值。 public static void main(String[] args) { int a = 1; int b = 2; swap(a, b); System.out.println("a:"+a+" b:"+b); } // 基本类型的值传递...原创 2018-03-22 14:14:10 · 144 阅读 · 0 评论 -
JDBC
JDBC原创 2015-06-07 09:56:58 · 335 阅读 · 0 评论 -
Java异常的处理
Java异常处理原创 2015-06-05 21:50:27 · 361 阅读 · 0 评论