![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 86
对框架进行了解,深入探究
猿小陆
原谅我一生不羁放纵爱自由!
展开
-
对大量日志导致Java后端某些类加载错误问题记录
1. 在使用日志记录问题时应该注意使用方式,以及使用级别,日志不是越多越好,打出关键错误点就行2. 在生产中日志级别应该尽量调高点,以免频繁产生大量的日志导致内存问题,或者将JVM内存参数调高,这样某些类日志级别可以调低,方便排查3. 项目初期最好使用slf4j来做日志记录,方便对日志进行统一维护,避免引入多余的日志类。原创 2023-06-02 15:20:06 · 614 阅读 · 0 评论 -
进阶笔录-深入理解Java线程之-AQS
AQS当中的同步等待队列也称CLH队列,CLH队列是Craig、Landin、Hagersten三人发明的一种==基于双向链表数据结构的队列,是FIFO先进先出线程等待队列,==Java中的CLH队列是原CLH队列的一个变种,线程由原自旋机制改为阻塞机制。不同的自定义同步器竞争共享资源的方式也不同。 ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁,可以保证线程安全。公平和非公平,可重入锁的实现。原创 2022-09-05 16:15:54 · 664 阅读 · 0 评论 -
进阶笔录-深入理解Java线程之Synchronized
问题:两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?问题分析以上的结果可能是正数、负数、零。为什么呢?因为 Java 中对静态变量的自增,自减并不是原子 操作。我们可以查看 i++和 i–(i 为静态变量)的 JVM 字节码指令 ( 可以在idea中安装一个jclasslib 插件)如果是单线程以上 8 行代码是顺序执行(不会交错)没有问题。 但多线程下这 8 行代码可能交错运行调用过程:一个程序运行多个线程本身是没有问题的问题出在多个线程访问共享资源一原创 2022-09-02 16:44:58 · 251 阅读 · 0 评论 -
进阶笔录-深入理解Java线程之Atomic原子类
在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchronized进行控制来达到线程安全的目的。但是由于synchronized是采用的是悲观锁策略,并不是特别高效的一种解决方案。实际上,在J.U.C下的atomic包提供了一系列的操作简单,性能高效,并能保证线程安全的类去更新基本类型变量,数组元素,引用类型以及更新对象中的字段类型。原创 2022-08-21 21:52:08 · 145 阅读 · 0 评论 -
进阶笔录-深入理解Java线程之CAS
CAS(Compare And Swap,比较并交换),通常指的是这样一种原子操作:针对一个变量,首先比较它的内存值与某个期望值是否相同,如果相同,就给它赋一个新值。以上伪代码描述了一个由比较和赋值两阶段组成的复合操作,CAS 可以看作是它们合并后的整体——一个不可分割的原子操作,并且其原子性是直接在硬件层面得到保障的。CAS可以看做是乐观锁(对比数据库的悲观、乐观锁)的一种实现方式,Java原子类中的递增操作就通过CAS自旋实现的。...原创 2022-08-17 16:32:33 · 99 阅读 · 0 评论 -
进阶笔录- 并发编程之深入理解Java线程
使用new Thread(创建一个线程,然后调用start()方法进行java层面的线程启动);调用本地方法start0(),去调用jvm中的JVM_StartThread方法进行线程创建和启动;调用new JavaThread(8thread entry, sz)进行线程的创建,并根据不同的操作系统平台调用对应的os:create _thread方法进行线程创建;...原创 2022-08-16 21:49:32 · 290 阅读 · 0 评论 -
一小篇文章教你看懂Java字节码
此篇文章深度虽浅,但至少让你可以看懂并且学会自己分析Java字节是如何被执行的原创 2022-05-04 18:19:34 · 1719 阅读 · 0 评论 -
关于高并发与多线程中的线程池
关于高并发与多线程中的线程池定义线程是稀缺资源,它的创建与销毁是一个相对偏重且耗资源的操作,而Java线程依赖于内核线程,创建线程需要进行操作系统状态切换,为避免资源过度消耗需要设法重用线程执行多个任务。线程池就是一个线程缓存,负责对线程进行统一分配、调优与监控。什么时候使用线程池:单个任务处理时间比较短需要处理的任务数比较大线程池的优势:重用存在的线程,减少线程创建,消亡的开销,提高性能提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性,可统一原创 2021-10-24 23:52:45 · 465 阅读 · 2 评论 -
@PostConstruct、@PreDestroy和initMethod、destroyMethod、InitializingBean、DisposableBean概念、区别以及执行顺序
@PostConstruct、@PreDestroy和initMethod、destroyMethod、InitializingBean、DisposableBean概念、区别以及执行顺序@PostConstruct定义相关此注解是在Java EE5规范中加入的,不是spring的,spring是指遵循了这个规范,在Servlet生命周期中有一定作用,它通常都是一些初始化的操作,但初始化可能依赖于注入的其他组件,所以要等依赖全部加载完再执行@PostConstruct注解用于在依赖关系注入完成原创 2021-10-04 17:34:02 · 675 阅读 · 1 评论 -
一次性看懂Equals和HashCode的用法与注意事项!面试必问基础!!
一次性看懂Equals和HashCode的用法与注意事项一直对Equals和HashCode的概念及用法很是模糊,现在有时间,搜集了一下资料,进行了归纳总结。关于Equals参考文档:https://www.cnblogs.com/lulipro/p/5628750.htmlObject类中默认的实现方式是 : return this == obj 。那就是说,只有this 和 obj引用同一个对象,才会返回true。而我们往往需要用equals来判断 2个对象是否等价,而非验证他们的唯一性原创 2021-09-20 17:04:33 · 205 阅读 · 2 评论 -
Java 集合及底层源码分析
文章目录**List集合**ArrayListVectorLinkedListSet集合HashSetLinkedHashSet**Map集合**Map 接口的遍历方式HashMapHashtablePropertiesTreeSetTreeMap开发中如何选择集合实现类Iterator遍历Collection工具类List集合集合类中元素有序(即添加顺序和取出顺序一致)、且可重复List集合中的每个元素都有其对应的顺序索引,即支持索引索引是从0开始的ArrayListArrayLis原创 2021-07-26 23:39:12 · 936 阅读 · 0 评论 -
Java迭代器(Iterator)的next()及hasNext方法的理解
关于java集合迭代器中的it.hashNext()和it.next()方法今天突然想了一下找个问题,网上大多数说是直接取下一个元素,很迷惑,那么迭代器中it.next()方法到底是取当前元素并且指针下移还是直接取得下一个元素呢?下面就找个问题追了一下源码 //jdk1.8 private class Itr implements Iterator<E> { int cursor; // index of next element to return原创 2021-08-06 00:21:49 · 6523 阅读 · 5 评论