当前位置: 首页 > news >正文

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()

相关文章:

  • SpringBoot集成Swagger指南
  • 33.HarmonyOS NEXT NumberBox 步进器高级技巧与性能优化
  • 【时时三省】(C语言基础)赋值表达式和赋值语句和变量赋初值
  • TypeScript类:面向对象编程的基石
  • 关于 ESP32 未公开 Bluetooth® HCI 命令的事实澄清
  • [多线程]基于环形队列(RingQueue)的生产者-消费者模型的实现
  • c++20 Concepts的简写形式与requires 从句形式
  • 二叉树_3_模拟实现二叉树
  • PySide(PyQT),QGraphicsItem的pos()和scenePos()区别
  • 【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
  • Kotlin D3
  • 推理模型对SQL理解能力的评测:DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet
  • H3C交换机的VRRP配置
  • Ansible运行原理揭秘:如何用YAML脚本掌控数服务器?
  • 第二篇:CTF常见题型解析:密码学、逆向工程、漏洞利用、Web安全
  • vue3 element-plus form校验不生效
  • python-leetcode-递增的三元子序列
  • 详细介绍 Jupyter nbconvert 工具及其用法:如何将 Notebook 转换为 Python 脚本
  • 数据库系统概论(三)数据库系统的三级模式结构
  • 软考 中级软件设计师 考点知识点笔记总结 day03
  • 光明日报:家长孩子共同“息屏”,也要保证高质量陪伴
  • 陕西宁强县委书记李宽任汉中市副市长
  • 加强战略矿产出口全链条管控将重点开展哪些工作?商务部答问
  • 商务部就开展加强战略矿产出口全链条管控工作应询答记者问
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责
  • 国台办:80年前台湾重归中国版图,80年后不可能让台湾分裂出去