
java基础
文章平均质量分 69
lsz冲呀
奋斗者
展开
-
Synchronized锁升级、降级
多线程中锁的升级synchronized锁升级原理:在锁对象的对象头里面有一个threadid字段,在第一次访问的时候threadid为空,jvm 让其持有偏向锁,并将threadid 设置为其线程id,再次进入的时候会先判断threadid是否与其线程id一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了synchronized 锁的升级。锁的升级的原创 2022-05-20 22:49:01 · 2474 阅读 · 0 评论 -
split()方法,limit参数作用
String.split()方法是有参数的,limit参数的作用有如下几种情况。limit = 0对结尾处的字符不进行分割String.split(String regex)默认的limit参数为0 public String[] split(String regex) { return split(regex, 0); }String s= "12/13/14//15//";String[] arr = s.split("/",0);Syste原创 2022-05-13 14:25:49 · 2171 阅读 · 0 评论 -
线程池核心设计与实现
导读线程池是一种通过“池化”思想,帮助我们管理线程而获取并发性的工具,在Java中的体现是ThreadPoolExecutor类。那么它的的详细设计与实现是什么样的呢?总体设计Java中的线程池核心实现类是ThreadPoolExecutor,本章基于JDK 1.8的源码来分析Java线程池的核心设计与实现。我们首先来看一下ThreadPoolExecutor的UML类图,了解下ThreadPoolExecutor的继承关系。ThreadPoolExecutor实现的顶层接口是Executor,顶转载 2022-05-10 13:12:45 · 196 阅读 · 0 评论 -
线程池结合SpringBoot
导读什么是线程池线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。创建线程本身开销大,反复创建并销毁,过多的占用内存。所以有大量线程创建考虑使用线程池。线程池不用反复创建线程达到线程的复用,更具配置合理利用cpu和内存减少了开销,性能会得到提高,还能统一管理任务比如服务器收到大量请求,每个请求都分配线程去处理,对服务器性能考验就比较大,如果创建5个以上线程考虑使用线程池。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等原创 2022-05-09 16:59:13 · 1282 阅读 · 1 评论 -
HashMap为什么总是使用2的幂作为哈希表的大小
导读今天在看HashMap源码时,发现HashMap扩容时总是2的幂次,也就是是说使用2的幂作为哈希表的大小,那究竟是为什么呢?今天我们就来讨论这个问题HashMapHashMap 默认的初始化⼤⼩为16。之后每次扩充,容量变为原来的2倍。创建时如果给定了容量初始值,那么 Hashtable 会直接使⽤你给定的⼤⼩,而 HashMap 会将其扩充为2的幂次⽅⼤⼩。源码分析这里以put为例public V put(K key, V value) { return putVal(ha原创 2022-04-16 21:08:15 · 693 阅读 · 0 评论 -
Java反射原理理解
导读我们来看一下Oracle 官方文档中对反射的描述:从Oracle 官方文档中可以看出,反射主要应用在以下几方面:反射让开发人员可以通过外部类的全路径名创建对象,并使用这些类,实现一些扩展的功能。反射让开发人员可以枚举出类的全部成员,包括构造函数、属性、方法。以帮助开发者写出正确的测试时可以利用反射API访问类的私有成员,以保证测试代码覆盖率。也就是说,Oracle希望开发者将反射作为一个工具,用来帮助程序员实现本不可能实现的功能。现在我们来看看其执行流程。反射获取类实例 Class.f原创 2022-04-14 20:15:33 · 721 阅读 · 0 评论 -
Static相关知识点
导语通常来说,用new创建类的对象时,数据存储空间才被分配,方法才供外界调用。但有时我们只想为特定域分配单一存储空间,不考虑要创建多少对象或者说根本就不创建任何对象,再就是我们想在没有创建对象的情况下也想调用方法。在这两种情况下,static关键字,满足了我们的需求。这面主要讲解static相关的知识。"static”"关键字是什么意思?Java中是否可以覆盖?"static"关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。Java中static方法不能被覆盖原创 2022-04-12 15:10:16 · 291 阅读 · 0 评论