死循环任务的线程结束方式

2023-11-11

记录于2021年11月16日

前言

以下介绍的两种方发的适用情景不同,可根据具体需求选择使用。

一、两种方法

1.方法一
用定时器去结束任务,设定最短结束时间,若任务执行耗时不记,那么最快会经过给定的时间后退出。若算上任务执行的时间,则最快会在(任务执行的时间+给定的时间)后退出,只有一个线程时可以使用此方法。
2.方法二
在本线程(任务为死循环)中等待另一个线程完成任务,当另一个任务完成,此线程结束,当在线程中执行一些计算而主线程又急需这个计算结果,或者是本线程需要在某些任务完成后立即执行时,可以使用本方法。

二、代码实例

1.方法一

(计数器数)*(定时器时间) = 线程最快结束时间:

class ThreadDead extends Thread{	
	@Override
	public void run(){
		int count = 0;
		while(true){	//死循环
			try{
				if(++count==50)			//计数器
					break;
				
				//在此可以定义需要完成的任务
				
				Thread.sleep(20);		//定时器
			}catch(InterruptedException ie){
				ie.printStackTrace(System.out);
			}
		}
		System.out.println("线程任务完成!");
	}

	public static void main(String[] args){
		new ThreadDead().start();
	}

}
2.方法二

情景说明:现在有两个线程,一个负责拍摄且拍摄一段时间,假定1秒,一个负责播放,播放线程在拍摄线程没有结束之前需要一直运行,一旦拍摄线程结束,播放线程也要随之结束

代码如下:

public class ThreadDead2  {		
	
	volatile boolean isFinished = false;	//轻量级锁,禁用CPU缓存,使变量的改变直接写入到内存
	
	ThreadDead2(){
		new Play().start();		//分别启动两个线程
		new Shot().start();
	}

	class Play extends Thread{

		@Override
		public void run(){
			while(true){
				//你的任务在此定义
				if(isFinished)
					break;
			}
			System.out.println("播放任务结束!");
		}
	}

	class Shot extends Thread{

		@Override
		public void run(){
			try{
				Thread.sleep(1000);		//假设拍摄任务耗时1000ms
			}catch(InterruptedException ie){
				ie.printStackTrace(System.out);
			}
			System.out.println("拍摄任务完成!");
			isFinished = true;			//拍摄任务完成
		}
	}

	public static void main(String[] args){
		new ThreadDead2();
	}
}

总结

若本文有不恰当的地方,望大佬留下评论及时指正。(~ ̄▽ ̄)~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

死循环任务的线程结束方式 的相关文章

随机推荐

  • WINRAR常用命令

    这段时间因为工作的需要 研究了一下关于WINRAR的操作 一下是关于它的一些常用命令 一 压缩命令1 将temp txt压缩为temp rarrar a temp rar temp txt 2 将当前目录下所有文件压缩到temp rarra
  • 编程器烧写NAND flash的一些说明

    注意事项 1 大小端模式 也即在使用编程器时需不需要做字节反序 2 Spare area处理方式 需要还是不需要 是否含有私有ECC算法 3 坏块处理方式 摘要一段说明如下 虽然针对西尔特SUPERPRO 9000U的文章 但也对许多其他的
  • ERROR: Failed to parse POMs org.apache.maven.project.ProjectBuildingException: Some problems were en

    问题 ERROR Failed to parse POMs org apache maven project ProjectBuildingException Some problems were encountered while pro
  • 数据分析毕业设计 全国疫情数据分析与3D可视化 - python 大数据

    文章目录 0 前言 1 课题背景 2 实现效果 3 设计原理 4 部分代码 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不
  • Java入门之二维向量定义及相加

    6 2 二维向量定义及相加 Java 10 分 裁判测试程序样例中展示的是一段二维向量类TDVector的定义以及二维向量求和的Java代码 其中缺失了部分代码 请补充完整 以保证测试程序正常运行 函数接口定义 提示 需要补充的成员方法有
  • 最优解算法的讨论

    不懂优化的人希望能有通用的方法来解决他手头的问题 但不幸的事没有这种方法存在 快速的方法都需要某些条件 比如常见的有强凸 线性 可分解啥的 目前研究的比较成熟的就是强凸光源可分解 非凸没有特别有效的方法来解 如果是强凸的 何必用那么复杂的方
  • python实战-读取xlsx表格批量替换文件名

    文章目录 一 前言 二 解决思路 三 具体代码实现 四 总结 一 前言 一位在校当老师的同学遇到了一个需求 学生1寸照片是以学生姓名命名 现在需要重命名1寸照片 重命名为exel里对应的学生姓名的身份证号码 我心想这个需求很容易实现 照片有
  • springboot初始化修改yml文件并加载

    package com lezu springboot config import org springframework core io ClassPathResource import org springframework core
  • Pytorch dataloader中的num_workers (选择最合适的num_workers值)

    num workers是Dataloader的概念 默认值是0 是告诉DataLoader实例要使用多少个子进程进行数据加载 和CPU有关 和GPU无关 如果num worker设为0 意味着每一轮迭代时 dataloader不再有自主加载
  • 使用fo-dicom读取Dicom文件的PixelData信息及像素信息(C# / fo-dicom)

    安装fo dicom 在vs中安装fo dicom 点击解决方案 右键选择管理解决方案的NuGet程序包 打开窗口后 在浏览框输入fo dicom进行搜索 然后选择fo dicom 勾选后点击安装即可 读取Dicom文件并获取PixelDa
  • 智能指针与句柄详解(一)

    前言 智能指针与引用计数详解 一 中提到实现智能指针有两种方法 一种是引用计数 另一种就是句柄类实现 什么是句柄类 句柄类是用来存储和管理基类指针 指针所指对象的类型可以变化 它既可以指向基类类型对象又可以指向派生类型对象 用户通过句柄类访
  • C++ 版 Opencv4 通过迭代器访问Mat类矩阵中的元素错误

    错误说明 很多教程中的示例代码如下 cv Mat a 3 4 CV 8UC3 cv Scalar 1 2 3 cv MatIterator
  • 手机端分页上拉下拉动画样式

    pullload scss pull load position relative overflow y scroll webkit overflow scrolling touch pull load head position abso
  • 微信小程序 webview mp4视频 在ios无法播放 安卓和谷歌浏览器正常

    记一次微信小程序开发 视频兼容问题 参考链接 https www jianshu com p 31f0593496ef 问题描述 微信小程序 内嵌webview 利用video标签播放流媒体视频 部分视频 报错 error 问题确认 安卓正
  • 2023最新网络安全毕业设计题目选题大全

    0 简介 毕业季马上就要开始了 不少同学询问学长网安专业选题以及开题相关的问题 今天跟大家分享信息安全毕设选题 最新的信息安全 网络安全 专业毕设选题 难度适中 适合作为毕业设计 大家参考 学长整理的题目标准 相对容易 工作量达标 题目新颖
  • C++对象调用优化

    C 对象调用优化 临时对象拷贝构造新对象 临时对象就不会产生 常见的对象调用过程 c 编译器对于对象构造的优化 用临时对象拷贝新对象的时候 临时对象就不产生了 直接构造新对象就可以了 include
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 打造智能机器人的秘诀:利用ChatGPT提示词,让机器人更聪明

    当我们与聊天机器人交互时 我们希望它们能够理解我们的意图并提供准确 有针对性和完整的答案 然而 聊天机器人并不是神 它们需要我们的帮助才能更好地服务我们 在使用ChatGPT时 提示词就像是聊天机器人的 灵魂 可以帮助ChatGPT更好地理
  • 最近都在说移民火星,这些黑科技你了解吗?

    点击查看全文 火星移民计划是由埃隆 马斯克所对媒体透露的移民火星并在火星建立社区的计划 尽管被曝出是骗局 许多人还是对这一计划抱有极大兴趣 近年来除了美国宇航局NASA 就连民间机构SpaceX 亚马逊 荷兰公司等都着手研发火星计划 预计在
  • 死循环任务的线程结束方式

    文章目录 前言 一 两种方法 1 方法一 2 方法二 二 代码实例 1 方法一 2 方法二 总结 记录于2021年11月16日 前言 以下介绍的两种方发的适用情景不同 可根据具体需求选择使用 一 两种方法 1 方法一 用定时器去结束任务 设