Java多线程进阶:创建方式、线程池详解与HashMap源码对比

需积分: 5 0 下载量 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时转换回链表。这样设计可以优化查询性能,平均查询效率提升。 - 红黑树的选择考虑了插入和查询的效率,相比平衡二叉树,其平均性能更好,尤其是在高并发场景下。 这些问题展示了面试者对并发编程深入理解和实践的期望,包括线程管理和多线程协作、高效数据结构选择以及高级编程技巧。准备面试者应熟悉这些概念,并能够根据实际问题灵活运用。
m0_51380933
  • 粉丝: 0
  • 资源: 1
上传资源 快速赚钱