多线程技术是服务端开发人员必须掌握的技术。
线程的创建和销毁,都涉及到系统调用,比较消耗系统资源,所以就引入了线程池技术,避免频繁的线程创建和销毁。
在Java中有一个Executors工具类,可以为我们创建一个线程池,其本质就是new了一个ThreadPoolExecutor对象。
线程池创建
先看一下ThreadPoolExecutor参数最全的构造方法:
- corePoolSize:线程池的核心线程数,即便是线程池里没有任何任务,也会有corePoolSize个线程在候着等任务。
- maximumPoolSize:最大线程数,不管你提交多少任务,线程池里最多工作线程数就是maximumPoolSize。
- keepAliveTime:非核心线程的存活时间,如果等了keepAliveTime时长还没有任务可执行,则线程退出。
- unit:指定keepAliveTime的单位,比如秒:TimeUnit.SECONDS。
- workQueue:一个阻塞队列,提交的任务将会被放到这个队列里。
- threadFactory:线程工厂,用来创建线程,主要是为了给线程起名字,默认工厂的线程名字形如:pool-1-thread-3。
- handler:拒绝策略,当线程池里线程被耗尽,且队列也满了的时候会调用。
以上就是创建线程池时用到的参数,需牢记。
线程池执行流程
这里用一个图来说明线程池的执行流程:
任务被提交到线程池,会先判断当前线程数量是否小于corePoolSize,如果小于则创建线程来执行提交的任务,否则将任务放入workQueue队列,如果workQueue满了,则判断当前线程数量是否小于maximumPoolSize,如果小于则创建线程执行任务,否则就会调用handler,以表示线程池拒绝接收任务。
面试需要掌握那些技能?
1. Java基础知识:包括面向对象编程、集合框架、多线程编程、JVM、测试和调试技术等。
2. 熟悉Spring框架:包括Spring MVC、Spring Boot、Spring Cloud等。
3. 掌握常见的数据库操作技术:如SQL语句、关系型数据库和非关系型数据库等。
4. 熟练使用版本控制工具:如Git等。
5. 对Web开发有一定的了解,熟悉前端相关技术:如HTML、CSS、JavaScript等。
6. 能够写高效的算法,并对数据结构有一定的了解。
7. 有良好的代码习惯,能够编写易于维护和扩展的代码,并理解单元测试和集成测试等概念。
8. 在面试过程中,还需要表达清晰、思路清晰明了、能够准确地回答面试官提出的问题,此外,自信、积极和礼貌也是很重要的。
2023年大厂面试官常问的技术核心知识点
1. Java基础知识:Java语言的基本知识,包括数据类型、继承、多态、接口等。
2. 面向对象编程:对面向对象编程原则和设计模式的理解,如单例、工厂、观察者、策略等。
3. 数据库知识:对关系型数据库和非关系型数据库操作的熟悉程度,掌握SQL语言,了解事务管理机制,并清楚地描述ORM框架的使用场景及实际操作。
4. Web开发:Web开发相关技术,例如Servlet、JSP、Spring MVC、JSON、RESTful API等。熟悉HTTP/HTTPS协议以及网络通信机制。
5. 常用框架:Spring、Hibernate、MyBatis等框架,尤其是Spring框架,深入理解Spring IOC,AOP等核心原理,知道如何配置基础设施组件,如事务管理、缓存等基础组件。
6. 分布式系统架构:分布式系统相关技术,如Dubbo、Zookeeper等,对微服务架构模式有一定的了解,熟悉分布式锁、分布式缓存、分布式数据存储等高可用性方案。
7. 性能排查:了解性能优化的方法,包括代码和SQL调优等,并且熟悉性能监测和分析工具,例如掌握JVM内存结构及堆栈排查技术。
8. 算法和数据结构:有基本的算法和数据结构知识,例如排序、查找、哈希表等。
我最近整理了一些小伙伴们发给我的面试题以及我的一些最新的面试等学习资料,有需要的小伙伴可以找我领取下。或者点击 → 《2023最新Java后端全套VIP面试学习资源》直接获取以下Java后端架构VIP进阶学习面试资料。
资料里面包含了:Java基础、MySQL、jvm、分布式、性能优化、spring 、spring boot、spring cloud、 MyBatis、Netty源码分析、算法、乙级高并发、Redis、dubbo、Tomcat、集合框架、锁、MQ、百万简历模板等等学习视频资料。
资料如图展示:(知识其中一部分)
同时也欢迎大家关注公众号【Java烂猪皮】,回复【666】,获取最新Java后端架构VIP学习资料以及视频学习教程,然后一起学习,一文在手,面试我有。
公众号【Java烂猪皮】里面每天都会分享很多独家的干货内容,比如:Java后端学习路线,分享实战项目,源码分析,百万级系统设计,系统上线的一些坑,MQ专题,真实面试题,每天都会回答大家提出的问题。
每一个专栏都是大家非常关心,和非常有价值的话题,我相信在专栏中你会学到很多东西,一起共勉。