Java 线程与线程池类/接口继承谱系图+核心方法详解


Java 线程与线程池类/接口继承谱系图

1. 线程相关类与接口关系
implements
returns
«interface»
Runnable
+run()
«interface»
Callable<T>
+call()
«interface»
Future<T>
+get()
+cancel()
+isDone()
Thread
-Runnable target
+start()
+run()
+join()
+interrupt()
+sleep(long)
«interface»
Executor
+execute(Runnable)
«interface»
ExecutorService
+submit(Callable<T>)
+shutdown()
+shutdownNow()
AbstractExecutorService
+submit(Runnable)
ThreadPoolExecutor
-corePoolSize: int
-maximumPoolSize: int
+execute(Runnable)
«interface»
ScheduledExecutorService
+schedule(Runnable, long, TimeUnit)

在这里插入图片描述


2. 线程常用方法及作用

Thread 类核心方法
方法作用示例
start()启动新线程,JVM 调用 run() 方法。new Thread(task).start();
join()阻塞当前线程,直到目标线程执行完毕。thread.join();
sleep(long ms)让当前线程休眠指定毫秒数,不释放锁Thread.sleep(1000);
interrupt()中断线程(设置中断标志位)。若线程在阻塞中(如 sleep),抛出 InterruptedExceptionthread.interrupt();
isAlive()判断线程是否处于活动状态(已启动但未终止)。if (thread.isAlive()) { ... }

3. 线程池常用方法及作用

ExecutorService 接口核心方法
方法作用示例
execute(Runnable task)提交无返回值的任务到线程池。executor.execute(() -> System.out.println("Task"));
submit(Callable task)提交有返回值的任务,返回 Future 对象。Future<String> future = executor.submit(() -> "Result");
shutdown()平滑关闭线程池:不再接受新任务,但会执行完已提交的任务。executor.shutdown();
shutdownNow()立即关闭线程池:尝试中断所有正在执行的任务,并返回未执行的任务列表。List<Runnable> tasks = executor.shutdownNow();
awaitTermination()阻塞直到所有任务完成,或超时发生,或线程被中断。executor.awaitTermination(10, TimeUnit.SECONDS);

4. 方法使用场景对比

join() vs shutdown()
方法作用对象使用场景示例
join()Thread 对象等待某个线程执行完毕。主线程等待子线程完成后再继续。
shutdown()ExecutorService关闭线程池,不再接受新任务,等待已提交任务完成。应用退出时优雅关闭线程池。
execute() vs submit() vs start()
方法所属类/接口返回值支持任务类型异常处理
start()ThreadRunnable需在 run() 内处理异常。
execute()ExecutorRunnable线程池会吞掉未捕获异常。
submit()ExecutorServiceFutureRunnable/Callable通过 Future.get() 捕获异常。

5. 核心代码示例

线程的 join() 方法
Thread thread1 = new Thread(() -> System.out.println("Thread 1"));
Thread thread2 = new Thread(() -> System.out.println("Thread 2"));thread1.start();
thread2.start();// 主线程等待 thread1 和 thread2 执行完毕
thread1.join();
thread2.join();
System.out.println("All threads completed");
线程池的 shutdown()
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.execute(() -> System.out.println("Task 1"));
executor.execute(() -> System.out.println("Task 2"));executor.shutdown(); // 不再接受新任务
executor.awaitTermination(10, TimeUnit.SECONDS); // 等待已提交任务完成
通过 submit() 获取任务结果
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(() -> {TimeUnit.SECONDS.sleep(1);return 42;
});Integer result = future.get(); // 阻塞直到任务完成
System.out.println("Result: " + result);
executor.shutdown();

6. 注意事项

  1. join() 的陷阱

    • 若主线程调用 join() 后,目标线程长时间不结束,会导致主线程永久阻塞。
    • 可通过设置超时避免:thread.join(5000);(最多等待5秒)。
  2. shutdown() 的正确使用

    • 调用 shutdown() 后仍提交任务会触发 RejectedExecutionException
    • 结合 awaitTermination() 确保所有任务完成。
  3. 线程池资源释放

    • 必须显式关闭线程池(shutdown()shutdownNow()),否则 JVM 不会退出。

总结

  • 线程类与接口RunnableCallableThreadExecutor 框架构成 Java 并发基础。
  • 核心方法
    • join():用于线程间同步。
    • shutdown():优雅关闭线程池。
    • submit():提交有返回值的任务。
  • 方法选择
    • 直接操作线程用 start()join()
    • 线程池任务管理用 execute()submit()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31602.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BFS(十三)463. 岛屿的周长

463. 岛屿的周长 给定一个 row x col 的二维网格地图 grid &#xff0c;其中&#xff1a;grid[i][j] 1 表示陆地&#xff0c; grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连&#xff08;对角线方向不相连&#xff09;。整个网格被水完全包围&#xff0c;但其中恰…

使用 Ansys Mechanical 和 optiSLang 进行材料模型校准

介绍 提供与实验数据匹配的准确仿真结果的材料模型是成功对实际应用进行 FEA 仿真的基础。根据实验数据校准材料模型是一个优化问题&#xff0c;其中仿真和真值信号之间的“距离”最小&#xff0c;表明模型与实验的“接近”程度。在此示例中&#xff0c;我们将对校准示例进行概…

SSA-朴素贝叶斯分类预测matlab代码

麻雀搜索算法&#xff08;Sparrow Search Algorithm&#xff0c;简称 SSA&#xff09;是于 2020 年提出的一种新兴群智能优化算法&#xff0c;其灵感主要来源于麻雀的觅食行为以及反捕食行为。 本次使用的数据是 Excel 格式的分类数据集数据。数据集被合理划分为训练集、验证集…

Houdini SOP层 Scatter节点

SOP 代表 Surface Operator&#xff08;几何体操作节点&#xff09;&#xff0c;所有几何体的建模、变形、分布等操作都在此层级完成。 Scatter节点的作用就是 以不同的密度在模型表面撒点 Scatter 节点属于 SOP&#xff08;几何体&#xff09;层级&#xff1a; 进入 Geometr…

数据结构:有序表的合并

前文介绍了《有序表的插入》&#xff0c;本文介绍有序表的合并。这两种对有序表的操作&#xff0c;是数据结构中常考的内容&#xff0c;特别是在 408 考卷中&#xff0c;在算法设计的题目中&#xff0c;有可能会考查对有序表的操作。那么&#xff0c;这两篇文章中的方法就是能够…

STM32Cubemx-H7-8-维特科技WT61C-TTL陀螺仪获取XYZ角度

前言 本人玩车的时候要用到陀螺仪 MPU6050容易卡死&#xff0c;然后还很漂&#xff0c;还是太难用了 68块钱的陀螺仪再上位机上的效果挺满意&#xff0c;于是打算用串口用到自己的模型上 本文教大家如何编写串口程序&#xff0c;通过串口获取角度 大家把本文的原理学会后&…

本地部署Navidrome个人云音乐平台随时随地畅听本地音乐文件

文章目录 前言1. 安装Docker2. 创建并启动Navidrome容器3. 公网远程访问本地Navidrome3.1 内网穿透工具安装3.2 创建远程连接公网地址3.3 使用固定公网地址远程访问 前言 今天我要给大家安利一个超酷的私有化音乐神器——Navidrome&#xff01;它不仅让你随时随地畅享本地音乐…

音视频入门基础:RTP专题(15)——FFmpeg源码中,获取RTP的视频信息的实现

一、引言 通过FFmpeg命令可以获取到SDP文件描述的RTP流的视频压缩编码格式、色彩格式&#xff08;像素格式&#xff09;、分辨率、帧率信息&#xff1a; ffmpeg -protocol_whitelist "file,rtp,udp" -i XXX.sdp 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这…

配置 Thunderbird 以使用 outlook 邮箱

配置 Thunderbird 以使用 outlook 邮箱 thunder bird 作为邮件客户端非常好用&#xff0c;不用每次登录邮箱网页端查看邮件&#xff0c;直接打开配置好的 thunder bird 即可免登录查看邮件。 0. 什么是 Thunder Bird ? https://www.thunderbird.net/zh-CN/ Thunderbird 创立…

关于ModbusTCP/RTU协议转Ethernet/IP(CIP)协议的方案

IGT-DSER智能网关模块支持西门子、倍福(BECKHOFF)、罗克韦尔AB&#xff0c;以及三菱、欧姆龙等各种品牌的PLC之间通讯&#xff0c;支持Ethernet/IP(CIP)、Profinet(S7)&#xff0c;以及FINS、MC等工业自动化常用协议&#xff0c;同时也支持PLC与Modbus协议的工业机器人、智能仪…

蓝桥杯省赛真题C++B组-裁纸刀2022

一、题目 问题描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝有一个裁纸刀&#xff0c;每次可以将一张纸沿一条直线裁成两半。 小蓝用一张纸打印出两行三列共 6 个二维码&#xff0c;至少使用九次裁出来&#x…

阿里云操作系统控制台实战评测:提升云资源管理与监控效率

文章目录 前言产品介绍操作系统控制台体验阿里云操作系统开通 帮助与总结建议 前言 随着云计算和虚拟化技术的发展&#xff0c;操作系统控制台作为运维管理的核心工具之一&#xff0c;在现代IT环境中发挥着越来越重要的作用。它提供了一种更加直观、高效的方式来管理操作系统&…

C++ 链表List使用与实现:拷贝交换与高效迭代器细致讲解

目录 list的使用&#xff1a; 构造与赋值 元素访问 修改操作 容量查询 链表特有操作 拼接&#xff08;Splice&#xff09; C11 新增方法 注意&#xff1a; stl_list的模拟实现&#xff1a; 一、链表节点设计的艺术 1.1 结构体 vs 类的选择 二、迭代器实现的精髓 2…

复试难度,西电卓越工程师学院(杭研院)考研录取情况

01、卓越工程师学院各个方向 02、24卓越工程师学院&#xff08;杭研院&#xff09;近三年复试分数线对比 PS&#xff1a;卓越工程师学院分为广研院、杭研院 分别有新一代电子信息技术、通信工程、集成电路工程、计算机技术、光学信息工程、网络信息安全、机械&#xff0c;这些…

【JavaEE】线程池

【JavaEE】线程池 一、引言1.1 什么是线程池1.2 为什么要使用线程池 二、ThreadPoolExecutor类2.1 构造方法2.1.1 corePoolSize和maximumPoolSize2.1.2 KeepAliveTime和unit2.1.3 BlockingQueue<Runnable> workQueue2.1.4 ThreadFactory threadFactory2.1.5 RejectedExec…

GaussDB安全配置指南:从认证到防御的全方面防护

一、引言 随着企业数据规模的扩大和云端化进程加速&#xff0c;数据库安全性成为运维的核心挑战之一。GaussDB作为一款高性能分布式数据库&#xff0c;提供了丰富的安全功能。本文将从 ​认证机制、权限控制、数据加密、审计日志​ 等维度&#xff0c;系统性地讲解如何加固 Ga…

Ubuntu 22.04 升级到 Ubuntu 24.04 全流程指南

&#x1f4cc; 1. 前言 Ubuntu 24.04 是最新的 LTS 版本&#xff0c;带来了内核更新、性能优化以及更强的安全性。本指南详细记录了从 Ubuntu 22.04 升级到 24.04 的完整过程&#xff0c;包括 升级前的准备、遇到的问题及如何选择最佳选项&#xff0c;避免升级失败或系统损坏。…

Git和GitHub基础教学

文章目录 1. 前言2. 历史3. 下载安装Git3.1 下载Git3.2 安装Git3.3 验证安装是否成功 4. 配置Git5. Git基础使用5.1 通过Git Bash使用5.1.1 创建一个新的仓库。5.1.1.1 克隆别人的仓库5.1.1.2 自己创建一个本地仓库 5.1.2 管理存档 5.2 通过Visual Studio Code使用 6. Git完成远…

【leetcode hot 100 234】回文链表

错误解法一&#xff1a;正序查找的过程中&#xff0c;将前面的元素倒叙插入inverse链中&#xff0c;找到偶数中点时&#xff0c;对称查找。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* Li…

Manus:成为AI Agent领域的标杆

一、引言 官网&#xff1a;Manus 随着人工智能技术的飞速发展&#xff0c;AI Agent&#xff08;智能体&#xff09;作为人工智能领域的重要分支&#xff0c;正逐渐从概念走向现实&#xff0c;并在各行各业展现出巨大的应用潜力。在众多AI Agent产品中&#xff0c;Manus以其独…