- 博客(26)
- 收藏
- 关注
原创 为什么要重写hashCode()和equals()
从源码的角度,介绍hashCode()和equals()函数的作用,解释为什么需要重写,什么时候需要重写,具体应该怎么重写。
2022-08-08 11:27:19
3854
2
原创 volatile和synchronized详解
volatile和synchronized详解一、JMM简介二、volatile关键字三、synchronized关键字四、volatile和synchronized的区别:五、实际应用·多线程下的单例模式:一、JMM简介建议先了解一下,JMM(Java内存模型)具体内容如下(下面是一张图片,详情请点击上面链接):二、volatile关键字关于volatile关键字的内容,请查看往期文章:volatile关键字详解具体内容如下(下面是一张图片,详情请点击上面链接):三、synchroniz
2022-04-13 01:44:15
7674
9
原创 volatile关键字详解
volatile关键字1.volatile简介:2.三大特性1>.保证可见性:代码验证:2>.保证有序性(禁止指令重排序)有序性的实现原理:3>.不保证原子性:解决方式:1.volatile简介:volatile 是 JVM 提供的轻量级的同步机制。volatile 关键字可以保证并发编程三大特征(原子性、可见性、有序性)中的可见性和有序性,不能保证原子性。2.三大特性1>.保证可见性:加了volatile关键字修饰的变量,只要有一个线程将主内存中的变量值做了修改,其他线程
2022-04-13 01:21:13
13111
4
原创 volatile和synchronized的区别
volatile和synchronized的区别应用范围:是否保证原子性:使用场景:保证有序性的方式:性能方面:应用范围:volatile关键字是对变量进行上锁,锁住的是单个变量,而synchronized还能对方法以及代码块进行上锁。是否保证原子性:在多线程环境下,volatile可以保证可见性和有序性,不能保证原子性,而synchronized在保证可见性和有序性的基础上,还可以保证原子性。volatile变量的原子性与synchronized的原子性是不同的。synchronized的原子性
2022-04-13 01:15:37
1240
1
原创 JMM(Java内存模型)详解
1.什么是JMM? JMM 是Java内存模型( Java Memory Model),简称JMM。它本身只是一个抽象的概念,并不真实存在,它描述的是一种规则或规范。通过这组规范,定义了程序中对各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。 计算机在执行程序时,每条指令都是在CPU中执行的。而执行指令的过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过
2022-04-13 01:02:37
34736
3
原创 十大排序算法与代码
排序算法选择排序插入排序冒泡排序希尔排序归并排序快速排序计数排序选择排序/** * 选择排序 - (时间复杂度 n2) - (空间复杂度 1) - 不稳定 : * 记录当前 未排序部分 最小值的 下标 , * 然后,与正确位置处的值进行交换。 */public class 选择排序 { private static void sort(int[] nums){ int minIndex = 0; //记录当前 未排序部分 最小值的 下标 for (
2022-04-11 23:25:01
292
原创 死锁问题与解决方式
死锁问题与解决方式什么是死锁·死锁的含义:·产生死锁的原因:·产生死锁的必要条件:代码演示:哲学家就餐问题定义一个筷子类:定义哲学家类:可能会产生死锁的测试类:解决死锁问题:什么是死锁·死锁的含义:死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外界干涉,那它们都将无法继续推进下去。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就会很低,否则就会因争夺有限的资源而陷入死锁状态。如下:·产生死锁的原因:系统资源不足进程运行推进的顺序不合适
2022-03-15 23:01:50
166
原创 Vector类源码详解
一、源码分析1.继承的父类&实现的接口public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable继承了AbstractList类(继承后可以使用迭代器遍历),实现了RandomAccess(标记接口,标明实现该接口的list支持快速随机访问),cloneable接口(标识接
2021-11-11 23:47:16
825
原创 HashTable类源码详解
一、源码分析1.继承的父类&实现的接口public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable {2.Entry节点类 /** * Hashtable bucket collision list entry * Entry节点类 */ privat
2021-11-11 23:35:21
791
1
原创 HashSet类源码详解
一、简介1.存储结构HashSet 的底层是利用HashMap(邻接表结构)进行存储的。hashSet 将存入的元素作为 hashMap的key,而所有key对应的value都是一个用static final 修饰的,名为PRESENT的Object 类对象(此对象有地址引用,但是实际内容为空)。·存储结构如图所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qMp8WCpv-1636560889790)(D:\1.code\IDEA_work\JAVA源码\J
2021-11-11 00:18:09
855
原创 HashMap类源码详解
一、简介1.存储结构及特点HashMap 底层的数据结构:底层是利用**邻接表(散列表)**的形式进行存储的:数组 + 链表/红黑树。HashMap 中每个节点 的存储方式为<key,value>形式,其中,key 无序不可重复,value可以重复。2.存储结构的由来首先我们需要明白:· 当hash值不同时,对象一定不同。原因:因为同样的计算方法计算同样的东西,计算结果一定相同。结果不同,就说明他俩根本不是同一个东西。· 当hash值相同时,对象可能相同,也可能不同。原因:
2021-11-10 19:47:11
1072
原创 LinkedList类源码详解
一、简介1.继承的父类&实现的接口public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable2.底层结构LinkedList 底层是通过 双向链表实现的。3.基本方法增(add)、 删(remove)、 改(set)、 查(get)4
2021-11-07 00:55:46
151
原创 ArrayList类源码详解
一、简介1.继承的父类 & 实现的接口继承了 抽象类AbstractList,实现了 List, RandomAccess, Cloneable, java.io.Serializable 接口public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable2.重要属性/
2021-11-04 21:37:15
218
原创 单例模式(Singleton)
一、核心特点单例模式,是一种常用的软件设计模式。在它的核心结构中,只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,一个类只有一个实例。即 一个类只有一个对象实例。二、应用场景1.为了避免重复创建对象,浪费内存资源。2.当多个线程同时访问同一资源时,保证数据安全。三、设计思想在JAVA中,对象是通过关键字new创建出来的,创建出来的对象被存放在堆内存里,它是始终存在的。而方法的执行是在栈内存里,执行完就释放了消失了,所以方法是临时存在的。·单例模式的特点:1.私有的构造函数:可以
2021-09-25 01:39:48
535
原创 合并两个有序数组
已知:给定两个有序数组(升序)int[] a = {2,3,5,7,8,9};int[] b = {0,1,2,4,6,7};要求:将 有序数组 a、b 合并为一个 有序数组 c。分析:1.首先创建一个长度等于 数组a、b之和的数组c,作为存储合并后结果的最终数组。2.合并两个有序数组:就是把两个有序数组的全部内容,按照既定顺序,整合排列为一个新的有序数组。思路:1>.借助一个for循环,以变量 index 作为循环变量,同时作为数组c的下标索引值,故for循环边界为:( ind
2021-08-16 17:11:54
760
原创 两个数的值交换
例:int a = 1;int b = 2;一、利用 一个中间变量缺点:浪费 多余空间。int c;c = a; //用 中间变量c ,复制一份 a 的值。a = b; //把 b 的值传给 变量a。(此时,变量a 内存的是 b 的值 )b = c; //把 c 内存储的 a的值 ,传给 变量b。(实现 变量b 存 a 的值 )二、利用 和差运算 ,完成交换缺点:第一步求和时,可能会出现 值溢出 的 运算错误。a = a + b; //将 a 和 b 的和,赋值给变量a。(首
2021-08-07 23:27:17
121
原创 JAVA的数据类型
JVM:将编程语言翻译为相依于平台的机器语言JRE:是 JAVA 的执行环境JDK:将 .java文件 编译为 .class文件
2021-06-20 01:34:27
140
原创 HTML第一个网页
基本元素标题元素:<h1>一级标题</h1>...<h6>六级标题</h6>光标标题:title="显示内容"图片元素:<img src="图片网址">链接元素:<a href="此处为链接"> </a>pre元素 (显示原文本,不进行空白折叠):<pre> </pre>无语义元素span(用于设置显示样式):<span> <span>标题元素1级标题——6级标
2020-07-20 20:12:31
250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人