Java多线程进阶:创建方式、线程池详解与HashMap源码对比
需积分: 5 157 浏览量
更新于2024-08-04
收藏 38KB MD 举报
在2022年11月2日的面试题中,讨论了高级的并发编程概念和技术,特别是关于Java线程处理和线程池的管理。面试者可能会提问关于以下几个关键知识点:
1. **线程创建方式**:
- **继承Thread类**:这是Java中创建线程的传统方式,通过重写`run()`方法。这种方式简洁,但限制了线程不能继承其他类。
- **实现Runnable接口**:这种方式避免了单继承的限制,通过实现`Runnable`接口并重写`run()`方法,然后将Runnable实例传递给Thread构造函数或使用ExecutorService的`submit()`方法来创建线程。
- **实现Callable接口**:`Callable`接口扩展了`Runnable`,允许线程执行后返回结果,并且可以处理异常。使用`Future`对象可以获取线程的结果。
2. **线程池**:
- **7个参数详解**:
- `corePoolSize`:核心线程数,最小线程数量,即使没有任务,也会保持这些线程活动。
- `maximumPoolSize`:最大线程数,当工作队列满且所有核心线程都运行时,会创建新线程。
- `keepAliveTime`:空闲线程存活的时间,超过这个时间没有任务的线程会被终止。
- `unit`:时间单位,如`TimeUnit.SECONDS`。
- `workQueue`:任务队列,如`ArrayBlockingQueue`,用于存储待处理任务。
- `threadFactory`:自定义线程工厂,用于创建新线程。
- `handler`:饱和策略,如`AbortPolicy`,决定当线程池满时如何处理新的任务。
3. **线程池的工作流程**:
当提交任务时,线程池会根据设置的参数决定如何处理。首先检查核心线程池是否满,不满则创建线程执行;满时,会将任务放入工作队列。如果队列也满,且线程池未满,则创建新线程;若线程池已满,会依据`handler`策略(如`AbortPolicy`)处理。
4. **HashMap在JDK7与JDK8的区别**:
- JDK7采用数组+链表结构,`Entry`作为节点,适用于小型容量,查询效率较低。
- JDK8引入了动态调整结构的特性,当链表长度超过8时转换为红黑树(平衡查找),小于等于6时转换回链表。这样设计可以优化查询性能,平均查询效率提升。
- 红黑树的选择考虑了插入和查询的效率,相比平衡二叉树,其平均性能更好,尤其是在高并发场景下。
这些问题展示了面试者对并发编程深入理解和实践的期望,包括线程管理和多线程协作、高效数据结构选择以及高级编程技巧。准备面试者应熟悉这些概念,并能够根据实际问题灵活运用。
2023-02-20 上传
152 浏览量
2023-04-13 上传
2023-05-03 上传
260 浏览量
178 浏览量
243 浏览量
104 浏览量
m0_51380933
- 粉丝: 0
- 资源: 1
最新资源
- 易语言学习-互联网服务支持库(ISAPI) - 公开测试版3(2012-5-29).zip
- mingw-w64+gcc-10.2.0
- 200个常用图标动画 .gif .ae素材下载
- Solving-programming-problems-in-R-on-your-own:曾经因为搜寻问题似乎无法让您找到解决方案而感到沮丧吗? 该研讨会将帮助您解决如何自行解决R中的编码问题!
- 超声波探伤方法汇总.rar
- 今日公交:今日扩展和苹果表展示公交到站
- 总标量
- 易语言学习-内存DLL操作支持库)含例子源码和演示录像.zip
- caesar-cipher_Cplusplus:在密码学中,凯撒(Caesar)代码或幻灯片代码,凯撒(Caesar)代码或凯撒Shift(Caesar Shift)是最简单且最知名的加密技术之一。 该代码包括替换代码,其中,浅色文本中的每个字母被替换为字母表中具有特定位置差异的另一个字母
- ViperC:适用于Objective-C和Swift的VIPER体系结构的Xcode模板
- NeverNote:built构建了一个简单的便笺和任务应用程序,以演示现代Android开发工具的使用-(Kotlin,协程,流程,体系结构组件,MVVM,房间,材料设计组件,通知等)
- RomeroLight
- unCompress.zip
- ETL_with_Pyspark_-_SparkSQL:一个示例项目,旨在使用Apache Spark中的Pyspark和Spark SQL API演示ETL过程
- 智能家居外文翻译
- 易语言学习-大鸟的目录树支持库--静态版(二次修正).zip