Java
文章平均质量分 89
贺兰猪
这个作者很懒,什么都没留下…
展开
-
Java终止线程
一般任何进行加锁的代码块,都是为了保护数据的一致性,如果在调用 thread.stop() 后导致了该线程所持有的所有锁的突然释放(不可控制),那么被保护数据就有可能呈现不一致性,其他线程在使用这些被破坏的数据时,有可能导致一些很奇怪的应用程序错误。在Thread中提供了一个interrupt()方法,从名字看表示中断,但实际上并不像stop()方法一样直接中断线程,而是向子线程发送一个中断的通知。当使用interrupt()方法时,中断标志就会置true,和使用自定义的标志来控制循环是一样的道理。原创 2023-04-23 22:58:37 · 632 阅读 · 0 评论 -
Java注解详解
Java注解又称Java标注,是在 JDK5 时引入的新特性,注解(也被称为元数据)。Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。原创 2023-04-08 17:34:18 · 1126 阅读 · 0 评论 -
Java动态代理
部分内容偷懒复制转载自少量内容根据自己的理解有所完善补充。转载 2023-04-03 22:09:10 · 220 阅读 · 0 评论 -
Java反射机制详解
是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法;这种动态获取信息以及动态调用对象方法的功能称为 java 语言的反射机制。原创 2023-04-02 22:11:34 · 685 阅读 · 0 评论 -
Java线程同步synchronized和Lock锁
指令重排序是编译器优化代码的一种操作,我们大部分写的代码中,彼此的顺序(不会影响程序逻辑),谁在前谁在后无所谓~编译器会通过调整代码的前后顺序从而提高程序效率。许多线程可能是可运行状态但只能有一个线程在运行该线程将持续运行直到它自行终止或者是由于其他的事件导致阻塞亦或者是出现高优先级线程成为可运行的则该线程失去CPU的占用权。- 所谓的非公平锁是指,线程获取锁的顺序不是按照访问的顺序先来先到的,而是由线程自己竞争,随机获取到锁。想要得到的结果是0但是最终的结果却不是我们想要的也不是我们可以控制的。原创 2023-03-19 11:51:57 · 615 阅读 · 0 评论 -
Java中的CAS详解
CAS(Compare-And-Swap)是比较并交换的意思,它是一条 CPU 并发原语,用于判断内存中某个值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS机制当中使用了3个值:内存地址V,旧的预期值A,计算后要修改的新值B两个线程同时对内存值V进行操作,V初始值为1线程1、线程2都对V加1计算,预期值A=1,新值B=2线程2先提交,预期值A==V,更新成功,将V更新为2线程1提交时4,发现预期值A=1,V=2,A!=V,提交失败,重新获取内存值V=2。原创 2023-04-01 20:29:22 · 934 阅读 · 0 评论 -
ConcurrentHashMap
因为 ConcurrentHashMap 是用于多线程的 ,如果ConcurrentHashMap.get(key)得到了 null ,这就无法判断,是映射的value是 null ,还是没有找到对应的key而为 null ,就有了二义性。ConcurrentHashMap 的迭代器创建后,就会按照哈希表结构遍历每个元素,但在遍历过程中,内部元素可能会发生变化,如果变化发生在已遍历过的部分,迭代器就不会反映出来,而如果变化发生在未遍历过的部分,迭代器就会发现并反映出来,这就是弱一致性。转载 2023-04-01 09:38:34 · 168 阅读 · 0 评论 -
HashMap和Hashtable的区别
HashMap和Hashtable它的底层存储机制都是数组加列表的结构,但是在jdk 1.8版本之后HashMap增加了一个新的结构叫做红黑树。原创 2023-03-17 10:26:39 · 287 阅读 · 0 评论 -
java中内存泄露8种情况
java内存泄露转载 2022-07-28 23:05:35 · 7700 阅读 · 0 评论 -
单例的破坏与反破坏
单例模式其实是对外隐藏了构造函数,保证用户无法主动创建对象。实际上我们是有办法可以破坏,当然也有方法反破坏1、反射通过反射的方式获取单例的构造函数,设置其访问权限,然后通过该方法创建一个新的对象:public class SingletonTest { public static void main(String[] args) { Singleton singleton = Singleton.getSingleton(); try {原创 2022-05-10 10:57:50 · 174 阅读 · 0 评论 -
序列化与反序列化
遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。在处理这个问题之前,你要先知道一个问题,这个比较重要。这个Serializable接口,以及相关的东西,全部都在 Java io 里面的。一、序列化和反序列化的概念序列化:把对象转换为字原创 2022-05-09 14:19:40 · 326 阅读 · 0 评论 -
HashMap底层原理解析
为了偷懒,部分内容直接copy了。然后附加几个hashMap中比较重要的点。以下为转载————————————————原文链接:https://blog.csdn.net/qq_43370771/article/details/111353046常见的数据结构有三种:1、数组结构: 存储区间连续、内存占用严重、空间复杂度大优点:随机读取和修改效率高,原因是数组是连续的(随机访问性强,查找速度快)缺点:插入和删除数据效率低,因插入数据,这个位置后面的数据在内存中都要往后移动,且大小固定不易动态扩展。原创 2021-07-17 15:57:35 · 1551 阅读 · 3 评论 -
ArrayList和LinkedList的区别
ArrayList和LinkedList均实现了List接口。两者区别如下:1、数据结构不同:ArrayList是基于Array(动态数组)的数据结构,LinkedList基于Link(链表)的数据结构。2、自由性不同:数组初始化必须指定初始化的长度,否则报错,所以大小固定,不适合动态存储,动态添加。链表自由性高,大小可变,扩展性强。3、增删、查询效率不同:随机访问List(get和set操作)时,ArrayList内存为连续的地址,可随机访问,查询速度快;LinkedList是线性..原创 2020-11-23 22:45:32 · 766 阅读 · 0 评论 -
Java中的Heap 和 Stack
栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。RAM即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。ROM即只读内存,是一种只能读出事先所存数据的固态半导体存储器。对比手机中的RAM和ROM分别对应电脑的内存和硬盘。栈(stack)与堆(heap)优缺点比较...原创 2019-10-09 16:10:02 · 538 阅读 · 0 评论 -
图解Java常用数据结构
本文转载自:https://www.cnblogs.com/xdecode/p/9321848.html最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程.主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList LinkedHashMap中的双向列表不再是回环的.HashMap中的单链表是尾插, 而不是头插...转载 2019-08-26 17:26:01 · 187 阅读 · 0 评论 -
Java的强引用,软引用,弱引用,虚引用
从 JDK1.2 版本开始,Java 把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。1、强引用(Strong Reference)强引用就是我们经常使用的引用,其写法如下:Objecto=newObject();如果再创建一个赋值语句Objectoj=o;那么o指向的Objec...原创 2019-09-19 19:36:58 · 213 阅读 · 1 评论