![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 87
一只快乐的融合怪
这个作者很懒,什么都没留下…
展开
-
synchronized 关键字的底层原理
当一个线程进入 synchronized 代码块之后,会让对象锁与 Monitor 进行关联,检查一下 Monitor 中的 Owner 是否为 null,如果为 null,则让当前线程持有,如果不为 null,则需要到 EntryList 中进行等待,如果线程调用了 wait 方法,则会进入到 WaitSet 里面。EntryList 关联的是处于阻塞状态的线程;它的底层由 monitor 实现的,monitor 是 jvm 级别的对象(C++实现),线程获得锁需要使用对象(锁)关联 monitor。原创 2024-02-02 16:27:07 · 377 阅读 · 0 评论 -
线程基础知识点
线程基础知识点原创 2024-01-19 17:07:37 · 377 阅读 · 0 评论 -
CPU密集型和IO密集型对 CPU内核之间的关系
她给你回消息肯定需要时间,这个时候你就可以下载 IDEA,下载完一看,她还没有回消息,然后看会博客。,由于 CPU 密集型任务的性质,导致 CPU 的使用率很高,如果使用线程池中的核心线程数量过多,会增加上下文切换的次数,带来额外的开销。打个比方,你的大脑是 CPU,你本来就在一本心思地写作业,多线程这时候就是要你写回作业,然后敲会代码,然后在看个视频,然后在切换回作业。,由于I/O 密集型任务 CPU 使用率并不是很高,可以让 CPU 在等待 I/O 操作的时候去处理别的任务,充分利用 CPU。原创 2023-12-07 19:22:12 · 377 阅读 · 0 评论 -
ELK 日志解决方案
进入 es 容器的 ik/config 目录查看配置文件注意:ext_dict_my.dic 是我自定义的词典文件,默认没有。编写自己的配置文件重启容器,并测试。原创 2023-12-06 21:15:03 · 1135 阅读 · 1 评论 -
JAVA 线程池,及7大参数,4大拒绝策略详解
如上图所示,执行顺序为:当提交任务数大于核心线程数时,会优先将任务放到阻塞队列中。当阻塞队列饱和时,会扩充线程池中的线程数,直到达到最大线程数。当任务数超出最大线程数时,就会触发线程池的拒绝策略。/**} /**throw new RejectedExecutionException("任务 " + r . toString() + " 拒绝 from " + e . toString());System . out . println("创建线程:" + r);t < 20。原创 2023-12-05 21:15:34 · 1067 阅读 · 0 评论 -
三种定时器的实现方式
Schedule是Spring框架提供的一种简单的定时任务调度方法,通过注解的方式即可实现定时任务的调度。它适用于简单的定时任务需求,例如每隔一段时间执行一次任务或者在特定时间执行任务。XXL-Job是一个分布式任务调度平台,提供了可视化的任务管理界面、任务的动态添加、修改、删除等功能。Quartz是一个功能强大的、开源的定时任务调度框架,提供了丰富的功能和灵活的调度管理。配置任务:任务管理 -> 新增,根据实际情况填写内容,注意 JobHandler内容需要与创建的调度任务注解名称保持一致。原创 2023-12-04 20:49:24 · 1319 阅读 · 0 评论 -
ConcurrentHashMap和HashMap的区别
可以看出,SynchronizedMap 确实比 Hashtable 改进了,synchronized 不再放在方法上,而是放在方法内部,作为同步块出现,但仍然是对象级别的同步锁,读和写操作都需要获取锁,本质上,仍然只允许一个线程访问,其他线程被排斥在外。根据 Java7 HashMap 的讲解可以知道,HashMap 在查找数据的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到需要的数据,这样时间复杂度就取决于链表的长度,为 O(n)。原创 2023-11-21 21:31:10 · 54 阅读 · 0 评论 -
Threadlocal 对象的使用
是Java提供的以一种方便的方式在一个线程内不同方法之间传递和获取对象的类。原创 2023-10-25 20:28:33 · 47 阅读 · 1 评论 -
CAS简单介绍
CAS 全称为翻译过来就是比较并且交换。它是一种 CPU 并发原语,用于实现多线程环境下的同步操作。CAS 通常包含三个参数:当前内存值V、旧的预期值A、即将更新的值B。CPU 读取内存值 V。CPU 将读取到的值和 旧的预期值 A 比较。如果结果相等,就将内存值修改为 B,并返回 true,否则,什么都不做,并返回false。CAS 是 Compare And Swap,是一条 CPU 原语,由操作系统保证原子性。原创 2023-10-24 21:06:51 · 50 阅读 · 1 评论 -
SpringMVC 的工作流程
SpringMVC 属于 Spring 的后续产品,其实就是 Spring 在原有的基础上,又提供了 Web 应用的 MVC 模块,以简单的把 SpringMVC 理解为是spring的一个模块。SpringMVC 是一个 MVC 的开源框架,SpringMVC 就相当于是 Struts2 加上 Spring 的整合,那么 SpringMVC 和 Spring 是什么样的关系呢?原创 2023-10-17 20:12:16 · 35 阅读 · 0 评论 -
提升测试技能:Junit、Knife4j和JMeter的使用指南
一般常用的测试方法有单元测试、接口测试和并发测试。本文对这三种测试方法在 JAVA 开发中常用的工具配置及使用做一个简单介绍。原创 2023-10-11 20:31:30 · 241 阅读 · 1 评论