JAVA里面如何让一个线程死亡或结束

Java线程死亡(死掉、退出、挂掉)的几种情况 文章目录1. Java线程死亡的几种情况2. 验证上述结论2.1 测试1:线程正常结束后,isAlive()返回False2.2 测试2:子线程抛出异常之后,线程的isAlive()返回False 相关文章 Java线程死亡(退出)的几种情况 【JVM】 OOM异常会导致JVM退出吗? 1. Java线程死亡的几种情况 Java线程会议如下三种方式结束,结束后就处于死亡状态 1、run()或者call()方法执行完成,线程正常结束; 2、线程抛出一个未捕获的Exception或Error; 3、直接调用该线 阅读详情
原文:http://www.java2000.net/p11369
这问题也是很常见的问题,自打 stop不推荐使用后,我们还有别的可以选择的方法吗?
设置一个标志,让其自动return最安全。
  1. /**
  2.  * JAVA里面如何使用一个线程死亡或结束.
  3.  * @author 赵学庆,Java世纪网(java2000.net)
  4.  *
  5.  */
  6. public class T {
  7.   public static void main(String[] args) {
  8.     // 启动线程
  9.     MyThread thread = new MyThread();
  10.     new Thread(thread).start();

  11.     // 你的其它的工作,此时线程在运行中

  12.     // 你不想让线程干活了,停掉它
  13.     // 注意,这只是一个标志,具体线程何时停,并不能精确控制
  14.     thread.allDone = true;

  15.   }

  16. }

  17. class MyThread implements Runnable {
  18.   boolean volatile allDone = false;

  19.   public void run() {
  20.     // 每次循环都检测标志
  21.     // 如果设置停止标志时已经在循环里
  22.     // 则最长需要等待一个循环的时间才能终止
  23.     while (!allDone) {
  24.       // 循环里的工作
  25.     }
  26.   }
  27. }
修正,增加了 volatile 关键字,避免多个CPU出问题。
线程超时死掉 解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实 现,可以来进行异步计算。 Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时 间之后,我就便可以从Future那儿取出结果。就相当于下了一张订货单,一段时间后可以拿着提订单来提货,这期间可以干别的任何事情。其中Future 接口就是订货单,真正处理订单的是Executor类,它根据Future接口的要求来生产产品。 Future接口提供方法来检测任务是否被执行完,等待任务执行完获得结果,也可以设置任务执行的超时时间。这个设置超时的方法就是实现Java程 序执行超时的关键。 Future接口是一个泛型接口,严格的格式应该是Future,其中V代表了Future执行的任务返回值的类型。 Future接口的方法介绍如下: boolean cancel(boolean mayInterruptIfRunning) 取消任务的执行。参数指定是否立即中断任务执行,或者等等任务结束 boolean isCancelled() 任务是否已经取消,任务正常完成前将其取消,则返回true boolean isDone() 任务是否已经完成。需要注意的是如果任务正常终止、异常或取消,都将返回true V get() throws InterruptedException, ExecutionException 等待任务执行结束,然后获得V类型的结果。InterruptedException 线程被中断异常, ExecutionException任务执行异常,如果任务被取消,还会抛出CancellationException V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException 同上面的get功能一样,多了设置超时时间。参数timeout指定超时时间,uint指定时间的单位,在枚举类TimeUnit中有相关的定义。如果计 算超时,将抛出TimeoutException Future的实现类有java.util.concurrent.FutureTask即 javax.swing.SwingWorker。通常使用FutureTask来处理我们的任务。FutureTask类同时又 实现了Runnable接口,所以可以直接提交给Executor执行。使用FutureTask实现超时执行的代码如附件:FutureTaskAndExcutor.java 不直接构造Future对象,也可以使用ExecutorService.submit方法来获得Future对象,submit方法即支持以 Callable接口类型,也支持Runnable接口作为参数,具有很大的灵活性。使用示例如FutureTaskAndExcutor中的limitDemo2方法。 立即下载

相关推荐

Java中线程死亡的几种情况实例分析

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。下面这篇文章主要给大家介绍了Java线程死亡的几种情况,需要的朋友可以参考下。

Java线程死亡的几种情况

Java线程会议如下三种方式结束,结束后就处于死亡状态 1、run()或者call()方法执行完成,线程正常结束; 2、线程抛出一个未捕获的Exception或Error; 3、直接调用该线程的stop()方法来结束该线程; 注意:当主线程结束时,其他线程不受任何影响,并不会随之结束。一旦子线程启动起来后,它就拥有和主线程相同的地位,不会受到主线程结束的影响。 为了测试某个线程是否已经死亡...

蚂蚁学Python 2711

华为手环实时心率数据导出到UWP项目中

hello大家好呀O(∩_∩)O最近在做毕设 其中有个小功能要用到实时心率数据。查找网上的资料发现只有小米手环的实时心率数据导出但是没有华为手环的,我试了华为手环但是并不能行得通哈哈哈。现在分享一下华为手环实时心率数据导出的代码。

apple_63713858的博客 1583

java线程死亡_关于java线程突然死亡

郁闷了,线程无故自动终止,执行了finally代码段:下面是线程的RUN方法:public void run () {// Output welcome message to the consolelabels = ServerLabels.getInstance();Log4jUtil.info ("------------------------------------------------...

weixin_29031161的博客 1166

【前端HTML生成条形码——MQ】

本文将展示前端HTML如何根据用户输入内容生成对应的条形码,附HTML和JS代码。代码如下(示例):

weixin_42588676的博客 1955

RGB接口电容触摸屏驱动(二)接口与时序说明

RGB接口电容触摸屏驱动(二)接口与时序说明

杰克拉力船长个人博客 4921

java线程是否活着_Java中线程死亡的几种情况实例分析

Java线程会议如下三种方式结束,结束后就处于死亡状态1、run()或者call()方法执行完成,线程正常结束;2、线程抛出一个未捕获的Exception或Error;3、直接调用该线程的stop()方法来结束该线程;注意:当主线程结束时,其他线程不受任何影响,并不会随之结束。一旦子线程启动起来后,它就拥有和主线程相同的地位,不会受到主线程结束的影响。为了测试某个线程是否已经死亡,可以调用线程对象...

weixin_39932762的博客 683

硬件-电源-智能保护:eFuse选型与实战设计全攻略

本文深入解析eFuse在硬件电源设计中的关键作用与实战选型技巧。作为智能保护器件,eFuse能提供毫安级精度的过流保护、多重故障防护和智能恢复功能,比传统保险丝快1000倍以上。文章详细介绍了eFuse的工作原理、五大选型维度和PCB布局要点,帮助工程师有效预防电源异常导致的硬件损坏,适用于AI服务器、工业控制等场景。

weixin_30879169的博客 201

java线程挂掉_Java线程停止的坑

复杂点的Java应用一般都会开多个线程在后台跑程序,有时候因为发布或其他原因需要停止程序,那就涉及到如何停止Java线程的问题.Java 的线程停止还是比较别扭的,如果是从其他语言转学java,很容易掉进坑里面.一 坑一 利用线程的stop方法如果初学Java,在看到Thread类有个stop方法,那第一反应停止应该用stop吧。在好些的IDE里面会给你提示,此方法已经被标记为:@Deprecat...

weixin_26717737的博客 885

知识蒸馏⚗️ | YOLOv5知识蒸馏实战篇

YOLOv5知识蒸馏教程

Coding... 9361

074.多任务学习:在YOLO基础上同时进行分割、关键点检测

本文探讨了在YOLOv5模型中实现检测、分割和关键点多任务的技术方案。通过分层特征抽取策略(检测用深层、分割用浅深融合、关键点用中层)解决特征共享问题;采用不确定性加权方法自动平衡多任务损失;设计了支持三种标签的数据流处理方式;并分享了推理部署时的后处理技巧。实践表明,合理的多任务设计可以提升主任务性能,但需权衡标注成本和推理效率。最终方案选择在训练时引入分割作为辅助任务,推理时仅保留检测和关键点,实现了检测mAP提升2.3%的优化效果。

2603_95664987的博客 45

java线程死亡_JAVA里如何让一个线程死亡或结束

这问题也是很常见的问题,自打 stop不推荐使用后,我们还有别的可以选择的方法吗?设置一个标志,让其自动return最安全。/*** JAVA里面如何使用一个线程死亡或结束.**/public class T {public static void main(String[] args) {// 启动线程MyThread thread = new MyThread();new Thread(thr...

weixin_35120608的博客 665

结构力学本构模型:复合材料模型:复合材料热力学行为技术教程_2024-08-07_06-54-53.Tex

热塑性复合材料是一种由热塑性树脂基体和增强纤维组成的复合材料。与热固性复合材料不同,热塑性复合材料在加热时可以软化,冷却时硬化,这一过程可以重复进行,因此它们具有可回收和可再加工的特性。热塑性树脂,如聚酰胺(尼龙)、聚碳酸酯、聚醚醚酮(PEEK)等,与碳纤维、玻璃纤维等增强材料结合,可以制备出具有高强度、高刚度和良好耐热性的复合材料。热粘弹性理论是研究材料在温度变化和时间依赖性载荷作用下的变形和应力响应。复合材料,由于其独特的微观结构,展现出复杂的热粘弹性行为。

809

java线程死亡_JAVA里面如何让一个线程死亡或结束(转)

这问题也是很常见的问题,自打 stop不推荐使用后,我们还有别的可以选择的方法吗?设置一个标志,让其自动return最安全。/*** JAVA里面如何使用一个线程死亡或结束.* @author 赵学庆,Java世纪网(java2000.net)**/public class T {public static void main(String[] args) {// 启动线程MyThread thr...

weixin_35241897的博客 301

【电源专题】案例:对比不同电池在不同电流下的电池放电曲线

无

一点硬件 2842

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java线程

Thread类中的run方法本身并不执行任何操作,如果我们重写了run方法,当线程启动时,它将执行。用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。守护线程的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是。一个进程可以包含多个线程,一个线程只能属于一个进程,线程不能脱离进程。有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了。:当一个Thread类或其子类的对象被声明并创建时,新生的线程对。进程可进一步细化为线程,是一个进程内部的最小执行单元,是操。

a1024jiushu的博客 167

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

线程的生命周期以及终止线程的方式

线程的生命周期以及终止线程的方式

weixin_54407785的博客 2612

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java主线程结束和子线程结束之间的关系

最近在和同事讨论java主线程和子线程之间的关系,自己也到网上搜索了下,发现各种答案都有,有些还是互相矛盾的。经过测试自己得出以下几个结论,跟大家分享下,如果有错误,欢迎大牛指正,帮助我这只小菜鸟。废话不多说,直接上结论: (一)Main线程是个非守护线程,不能设置成守护线程。               这是因为,main线程是由java虚拟机在启动的时候创建的。main方法开始执行的时候,

aty 2万+

java使线程处于死亡状态_啃碎并发(二):Java线程的生命周期

前言=====当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直"霸占"着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。线程状态转换关系1 新建(...

weixin_39760689的博客 1125
上一篇: 白话Eclipse和MyEclipse的关系
下一篇: 一个网友如何选择学习方向的问题
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值