![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 59
Java基础、进阶
凡人编程传
避免专业名词,喜欢讲人话。开发是座围城,但城外是一片荒凉,愿我们一起成长!
展开
-
SpringBoot 整合线程池如此简单
分为三步1. 启动类加 [@EnableAsync ]() 注解 2. 在方法上加 [@Async ]() 注解 3. 创建线程池配置类原创 2024-08-14 10:30:29 · 226 阅读 · 0 评论 -
Java栈溢出|内存泄漏|内存溢出
一个线程每执行到一个方法,JVM就会创建一个栈帧(用于存储基本数据类型、对象指针和返回值等),并将栈帧压入栈中。一旦递归过深,线程栈的容量增长超过了允许的栈容量,就会抛出StackOverflowError(栈溢出) 错误。在实际开发中,默认的线程栈大小通常已经足够满足需求,只有在遇到线程栈溢出错误时才需要考虑调整大小。Java线程栈默认大小是由操作系统决定的,一般为1MB或2MB。如果需要调整线程栈的大小,可以使用。Java虚拟机栈是线程私有的,它的生命周期和线程同步。原创 2024-08-13 15:25:43 · 349 阅读 · 0 评论 -
Java基础:线程的三种创建方式
一、继承Thread类二、实现Runable接口三、实现Callable接口原创 2024-07-04 18:04:08 · 478 阅读 · 0 评论 -
为什么重写equals方法必须要重新hashCode方法?
其实就是为了保证当该对象作为key时**哈希表**的检索效率原创 2024-05-15 14:40:34 · 362 阅读 · 0 评论 -
JDK动态代理和CGLIB动态代理
Java动态代理是一种在运行时创建代理对象的技术,它允许开发者在不修改目标类代码的情况下,通过代理类对目标类的实例方法进行增强或拦截。动态代理的核心价值在于能够在程序运行阶段动态地生成一个实现了预定义接口的新类,这个新类就是所谓的“代理类”。无论是哪种动态代理方式,其目的都是为了在目标方法执行前后增加额外的行为,或者改变原有的行为,以满足特定的需求,例如AOP(面向切面编程)框架中的事务管理、性能监控、日志记录等功能。原创 2024-05-30 11:25:31 · 1125 阅读 · 0 评论 -
Java基础:泛型擦除
擦除是将泛型类型替换成它的父类,然后使用的时候进行强制类型转换,因为在编译阶段已经确保了数据类型的一致性,所以强转比较安全。Java其实是伪泛型。原创 2024-06-25 18:24:00 · 254 阅读 · 0 评论 -
浅拷贝、深拷贝与序列化【初级Java必需理解的概念】
说明浅拷贝克隆的对象中,引用类型的字段指向的是同一个,当改变任何一个对象,另外一个对象也会随之改变。原创 2024-06-03 15:14:59 · 531 阅读 · 1 评论 -
Java基础:throw和throws的详解
总结来说,throw是用来抛出一个具体的异常实例,而throws是用来声明方法可能会抛出哪些类型的异常,是对调用者的一种通知和要求。原创 2024-06-21 17:02:16 · 246 阅读 · 0 评论 -
Future集合会等线程池执行完才开始遍历吗?
Future集合并不是等线程池执行完才开始遍历,而是线程池内的线程执行完一条Future集合就立即遍历一条原创 2024-05-17 11:02:52 · 313 阅读 · 0 评论 -
Java线程池maximumPoolSize和workQueue哪个先饱和?
按照上面的结论推测,当我们有16个要执行的任务,首先会占用5个核心线程,然后放10个任务到阻塞队列,剩下的1个加上核心线程数是6个,达不到最大线程数,所以会创建活动线程,此时线程池中会有6个可用线程。我之前的理解是,当线程数达到corePoolSize后,新任务到来会创建新线程直到达到maximumPoolSize,当达到maximumPoolSize后,新任务才会放到workQueue里。若corePoolSize满了之后新任务放到workQueue里,那么这里应该打印两次,第一次5条,第二次1条。原创 2024-05-14 18:03:53 · 673 阅读 · 1 评论