news 2026/4/18 7:28:10

Java 多线程编程 - 线程池任务终止分析(线程池任务终止、中断的本质、检查中断)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 多线程编程 - 线程池任务终止分析(线程池任务终止、中断的本质、检查中断)

一、线程池任务终止

  1. shutdown():等当前任务完成,然后停止
ScheduledExecutorServicescheduler=Executors.newScheduledThreadPool(1);// 启动任务,初始延迟 0 秒,每次执行完后延迟 1 秒再执行下一次ScheduledFuture<?>future=scheduler.scheduleWithFixedDelay(()->{try{System.out.println("任务开始执行");Thread.sleep(5*1000);System.out.println("任务执行完成");}catch(InterruptedExceptione){System.out.println("任务被中断");}},0,1,TimeUnit.SECONDS);try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}scheduler.shutdown();
# 输出结果 任务开始执行 任务执行完成
  1. cancel(true) + shutdown():立即中断当前任务,然后停止
ScheduledExecutorServicescheduler=Executors.newScheduledThreadPool(1);// 启动任务,初始延迟 0 秒,每次执行完后延迟 1 秒再执行下一次ScheduledFuture<?>future=scheduler.scheduleWithFixedDelay(()->{try{System.out.println("任务开始执行");Thread.sleep(5*1000);System.out.println("任务执行完成");}catch(InterruptedExceptione){System.out.println("任务被中断");}},0,1,TimeUnit.SECONDS);try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}future.cancel(true);scheduler.shutdown();
# 输出结果 任务开始执行 任务被中断
  1. shutdownNow():立即中断所有任务,然后停止
ScheduledExecutorServicescheduler=Executors.newScheduledThreadPool(1);// 启动任务,初始延迟 0 秒,每次执行完后延迟 1 秒再执行下一次ScheduledFuture<?>future=scheduler.scheduleWithFixedDelay(()->{try{System.out.println("任务开始执行");Thread.sleep(5*1000);System.out.println("任务执行完成");}catch(InterruptedExceptione){System.out.println("任务被中断");}},0,1,TimeUnit.SECONDS);try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}scheduler.shutdownNow();
# 输出结果 任务开始执行 任务被中断

二、中断的本质

  1. Java 中的中断机制是协作式的,而不是强制性的

  2. 上述案例中的中断是通过触发Thread.sleep()的 InterruptedException 来实现的

  3. 中断只是设置标志位,并不能强制打断任务,如下例

ScheduledExecutorServicescheduler=Executors.newScheduledThreadPool(1);// 启动任务,初始延迟 0 秒,每次执行完后延迟 1 秒再执行下一次ScheduledFuture<?>future=scheduler.scheduleWithFixedDelay(()->{try{System.out.println("任务开始执行");ServerSocketserverSocket=newServerSocket(9999);serverSocket.accept();System.out.println("任务执行完成");}catch(IOExceptione){e.printStackTrace();}},0,1,TimeUnit.SECONDS);try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}future.cancel(true);scheduler.shutdown();
  1. Thread.sleep()在抛出 InterruptedException 时会自动清除中断标志位
ScheduledExecutorServicescheduler=Executors.newScheduledThreadPool(1);// 启动任务,初始延迟 0 秒,每次执行完后延迟 1 秒再执行下一次ScheduledFuture<?>future=scheduler.scheduleWithFixedDelay(()->{try{System.out.println("任务开始执行");System.out.println("中断标志位:"+Thread.currentThread().isInterrupted());Thread.sleep(5*1000);System.out.println("任务执行完成");}catch(InterruptedExceptione){System.out.println("任务被中断");}finally{System.out.println("中断标志位:"+Thread.currentThread().isInterrupted());}},0,1,TimeUnit.SECONDS);try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}future.cancel(true);scheduler.shutdown();
# 输出结果 任务开始执行 中断标志位:false 任务被中断 中断标志位:false

三、检查中断

  1. shutdown():等当前任务完成,然后停止,中断标志位没有变化
ScheduledExecutorServicescheduler=Executors.newScheduledThreadPool(1);// 启动任务,初始延迟 0 秒,每次执行完后延迟 1 秒再执行下一次ScheduledFuture<?>future=scheduler.scheduleWithFixedDelay(()->{System.out.println("任务开始执行");System.out.println("中断标志位:"+Thread.currentThread().isInterrupted());Scannerscanner=newScanner(System.in);System.out.print("请输入一个整数:");intnum=scanner.nextInt();System.out.println("任务执行完成");System.out.println("中断标志位:"+Thread.currentThread().isInterrupted());},0,1,TimeUnit.SECONDS);try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}scheduler.shutdown();
# 输出结果 任务开始执行 中断标志位:false 请输入一个整数:12 任务执行完成 中断标志位:false
  1. cancel(true) + shutdown():立即中断当前任务,中断标志位会被设置为 true,然后停止
ScheduledExecutorServicescheduler=Executors.newScheduledThreadPool(1);// 启动任务,初始延迟 0 秒,每次执行完后延迟 1 秒再执行下一次ScheduledFuture<?>future=scheduler.scheduleWithFixedDelay(()->{System.out.println("任务开始执行");System.out.println("中断标志位:"+Thread.currentThread().isInterrupted());Scannerscanner=newScanner(System.in);System.out.print("请输入一个整数:");intnum=scanner.nextInt();System.out.println("任务执行完成");System.out.println("中断标志位:"+Thread.currentThread().isInterrupted());},0,1,TimeUnit.SECONDS);try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}future.cancel(true);scheduler.shutdown();
# 输出结果 任务开始执行 中断标志位:false 请输入一个整数:12 任务执行完成 中断标志位:true
  1. shutdownNow():立即中断所有任务,中断标志位会被设置为 true,然后停止
ScheduledExecutorServicescheduler=Executors.newScheduledThreadPool(1);// 启动任务,初始延迟 0 秒,每次执行完后延迟 1 秒再执行下一次ScheduledFuture<?>future=scheduler.scheduleWithFixedDelay(()->{System.out.println("任务开始执行");System.out.println("中断标志位:"+Thread.currentThread().isInterrupted());Scannerscanner=newScanner(System.in);System.out.print("请输入一个整数:");intnum=scanner.nextInt();System.out.println("任务执行完成");System.out.println("中断标志位:"+Thread.currentThread().isInterrupted());},0,1,TimeUnit.SECONDS);try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}scheduler.shutdownNow();
# 输出结果 任务开始执行 中断标志位:false 请输入一个整数:12 任务执行完成 中断标志位:true
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 4:02:00

FaceFusion人脸替换的安全边界探讨

FaceFusion人脸替换的安全边界探讨 在短视频与虚拟内容爆发式增长的今天&#xff0c;一张脸能否“合法”出现在另一具身体上&#xff0c;已不再只是电影特效师关心的问题。从社交平台上的趣味换脸滤镜&#xff0c;到影视剧中已故演员的“复活”&#xff0c;再到深伪&#xff08…

作者头像 李华
网站建设 2026/4/17 19:52:49

FaceFusion镜像支持自动伸缩集群,节省GPU成本

FaceFusion镜像支持自动伸缩集群&#xff0c;节省GPU成本在AI应用日益普及的今天&#xff0c;图像生成与人脸融合技术正从实验室走向大规模商用。以FaceFusion为代表的开源项目&#xff0c;凭借其高精度的人脸对齐和自然的换脸效果&#xff0c;被广泛应用于短视频、虚拟形象、智…

作者头像 李华
网站建设 2026/4/18 5:22:20

FaceFusion支持FP16精度推理吗?显存占用降低一半

FaceFusion支持FP16精度推理吗&#xff1f;显存占用真的能降一半吗&#xff1f;在如今AI换脸技术逐渐“破圈”的背景下&#xff0c;FaceFusion这类开源工具已经从极客玩具走向实际应用场景——直播虚拟人、影视后期修复、个性化短视频生成等。但随之而来的挑战也愈发明显&#…

作者头像 李华
网站建设 2026/4/10 1:14:57

FaceFusion社区活跃度排行第一,用户反馈极佳

FaceFusion社区活跃度排行第一&#xff0c;用户反馈极佳在开源图像融合与人脸交换工具层出不穷的当下&#xff0c;一款名为FaceFusion的项目悄然走红。它不仅登顶多个技术社区热度榜单&#xff0c;在GitHub、Reddit和Discord等平台上持续引发讨论&#xff0c;更凭借出色的用户体…

作者头像 李华
网站建设 2026/4/16 17:09:53

FaceFusion能否用于在线教育?教师形象虚拟化尝试

FaceFusion能否用于在线教育&#xff1f;教师形象虚拟化尝试 在远程教学逐渐成为常态的今天&#xff0c;许多教师依然面临一个尴尬的现实&#xff1a;为了保证课堂互动性&#xff0c;他们不得不日复一日地“露脸”直播。可一旦摄像头开启&#xff0c;网络卡顿、背景杂乱、外貌焦…

作者头像 李华