java多线程学习3:如何结束一个线程

java多线程学习总结 1.进程与线程的区别 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位; 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信 号等),某进程内的线程在其他进程不可见; 调度和切换:线程上下文切换比进程上下文切换要快得多 2.创建线程的三种方法: 1.创建线程方式一:继承Thread类,重写run方法,调用start开启线程 publ 阅读详情

现在的jdk已经弃用了,stop方法。那么我们怎么结束一个线程呢。

先写一个实现:

Thread t = new Thread(()->{
            while(Thread.interrupted()) {
                return;
            }
        });
        t.start();
        t.interrupt();

讲道理,按照这种方式,这个代码是能被中断的。线程结束嘛。
可是有个问题。如果我中间有个业务块。这个业务要执行1h。
而我需要它只能执行30m执行不完就kill掉这个线程。怎么做呢
用到前面的知识。贴个代码。

不多说贴代码。

package com.puqiuyu.thread.blog;

public class ThreadService {
    private Thread threadService;
    private boolean finished = false;
    public void execute(Runnable task) {
        threadService = new Thread(()->{
            Thread runner= new Thread(task);
//业务线程设为守护线程。当用户线程死亡。该线程死亡
            runner.start();
            try {
                runner.join();
//保证runner执行完成后,才执行threadservice
                finished = true;
            } catch (InterruptedException e) {
                System.out.println("end ....");
            }
        });
        threadService.start();
    }

    public void shutdown(long mills) {
        long starttime = System.currentTimeMillis();
        while(!finished) {
            if(System.currentTimeMillis()-starttime >=mills) {
                this.threadService.interrupt();
                //执行超时,则中断这个join,让threadservice执行结束。deamon就挂掉
                break ;
            }
        }
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            System.out.println("interrupt .....");
        }
        finished = false;
    }
}

这个代码是看的汪文君老师的实现。
利用deamon线程的特殊型,将业务线程设为deamon线程。通过join保证,保证业务线程的先行执行完毕。通过interrupt中断主线程。结束主线程后,守护线程终结。很好的思路。不过有一点。deamon是在所有用户线程挂掉之后才会挂掉。所以,main里面跑跑就行了。

【Java篇】多线程详解 Java系统在语言层次上对多线程直接提供支持,多线程的主要目的是将一个程序中的各个程序段并发化,在在通常情况下,Java程序各部分是按顺序一次执行的,由于某种原因,需要将这些按顺序执行的程序段转化为并发执行,每个程序段在逻辑上是相互完整的代码段。实际上,在单处理器上,同一时刻只能执行一个代码,但是在同一时间段内,这些代码交替执行,所谓的“微观串行,宏观并行”。... 阅读详情

相关推荐

MATLAB射线追踪算法实战:从零搭建通信信号传播模型(附完整代码)

本文提供了一份详细的MATLAB射线追踪算法实战指南,指导读者从零开始搭建通信信号传播模型。内容涵盖场景建模、射线发射、路径追踪与信号计算等核心环节,并附有完整代码,帮助通信与电子工程领域的学习者和工程师快速掌握这一精确模拟电磁波传播的关键技术。

weixin_29092031的博客 199

Java 终止线程的几种方式

一般run()方法执行完,线程就会正常结束,然而,常常有些线程是伺服线程。他们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。我们可以直接使用thread.stop()来强行终止线程,但是stop()方法是很危险的,就想突然关闭电源一样。所谓正常运行结束,就是程序正常运行结束,线程自动结束。

书香水墨 9481

modbus-esp8266库深度解析:工业级Modbus协议栈实现

Modbus是一种广泛应用于工业自动化领域的通用串行通信协议,其核心在于标准化的功能码、寄存器模型与帧结构设计。基于RTU、ASCII和TCP三种传输变体,Modbus协议通过主从架构实现设备间可靠数据交互,具备低开销、高兼容性与强实时性等技术价值。在边缘计算与工业物联网场景中,它被广泛用于PLC通信、传感器数据采集、HMI集成及远程固件升级(FOTA)等关键任务。针对ESP8266/ESP32等Wi-Fi微控制器平台,modbus-esp8266库提供了完整协议栈支持,涵盖多实例并发、回调驱动架构、零拷贝

weixin_42315569的博客 351

Java终止线程的三种方式

参考文章:Java终止线程的三种方式 停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作。 在 Java 中有以下 3 种方法可以终止正在运行的线程: 使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程中止。 使用 stop() 方法强行终止线程,但是不推荐使用这个方法,该方法已被弃用。 使用 interrupt 方法中断线程。 1. 使用标志位终止线程 在 run() 方法执行完毕后,该线程就终止了。但是在某些特殊的情况下,run() 方法

justlpf的专栏 3813

别再凭感觉估算!用ADS的EBOND库精确仿真Bonding线寄生电感(附完整参数设置指南)

本文详细介绍了在ADS中使用EBOND库精确仿真Bonding线寄生电感的方法,帮助射频工程师在毫米波频段实现高精度建模。通过三维物理参数和电磁场求解算法,EBOND模型能将误差控制在5%以内,显著提升电路性能。文章还提供了完整的参数设置指南和实战操作步骤,适用于5G毫米波前端模块等高频应用场景。

weixin_28730131的博客 507

c++多线程(1)------创建和管理线程td::thread

std::thread 是 C++11 标准库中用于创建和管理线程的核心类,定义在 <thread> 头文件中。它使得多线程编程变得简单、类型安全且跨平台。

jndingxin的专栏 648

Java中终止线程的3种方法,你是否了解?

本文介绍了Java中终止线程的3种方法,包含stop、使用退出标志和使用interrupt()方法中断线程。

m0_64830897的博客 4555

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 985

Java中如何停止一个正在运行的线程

来判断thread对象所代表的线程是否停止,但从控制台打印的结果来看,线程并未停止,这也证明了interrupted()方法的解释,测试当前线程是否已经中断。我们先来看看this.interrupted()方法的解释:测试当前线程是否已经中断,当前线程是指运行this.interrupted()方法的线程。由于stop()方法以及在JDK中被标明为“过期/作废”的方法,显然它在功能上具有缺陷,所以不建议在程序张使用stop()方法。上面的示例虽然停止了线程,但如果for语句下面还有语句,还是会继续运行的。

maruofan666的博客 3216

保姆级教程:用Kvaser DB Editor从零创建你的第一个DBC文件(附CAN信号属性详解)

本文提供了一份详细的Kvaser DB Editor教程,指导用户从零开始创建DBC文件,并深入解析CAN信号属性的关键设置。通过步骤清晰的安装指南、信号属性配置详解和实用技巧,帮助工程师和学生快速掌握CAN总线通信的核心工具,提升工作效率。

weixin_27076351的博客 250

用Docker-Compose三节点部署生产级Doris集群:从配置文件到故障转移

本文详细介绍了如何使用Docker-Compose部署一个生产级的三节点Apache Doris集群。内容涵盖从核心架构理解、配置文件编写到集群初始化验证的全过程,并重点讲解了如何实现高可用、数据持久化、健康检查以及故障转移等生产级运维关键点,为中小团队提供了一种在容器化便利性与系统稳定性间取得平衡的可靠部署方案。

kkk56的博客 858

JAVA中如何停止一个线程?

停止线程时,应该使用非强制性的方法,如检查标志变量或响应中断,以确保线程能够安全、干净地结束。直接终止线程可能会导致不可预见的问题,因此应该避免使用。

赵KK的博客 594

PY32F406K1CU6+I2C+ AT24C64 基本配置

【代码】PY32F406K1CU6+I2C+ AT24C64 基本配置。

sam的博客 90

Java判断多线程是否结束

JAVA判断多线程是否结束应用场景主要方法实现代码 应用场景 程序中需要等待多线程任务全部执行完毕后,再执行后续操作。 主要方法 使用方法 1、确定了你开启的线程数,那么在主程序运行前。 CountDownLatch countdown = new CountDownLatch(10);//这里的10就是你的子线程数。 2、在每个子线程结束后,调用 countdown.countDown(); 当...

weixin_43751885的博客 5612

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java多线程详解(一)Java多线程入门

最近听很多面试的小伙伴说,网上往往是一篇一篇的Java多线程的文章,除了书籍没有什么学习多线程的一系列文章。但是仅仅凭借一两篇文章很难对多线程有系统的学习,而且面试的时候多线程这方面的知识往往也是考察的重点,所以考虑之下决定写一系列关于Java多线程的文章。文章参考了高老师的《Java多线程编程核心技术》。力争使用最短的篇幅把Java多线程的知识作以系统的讲述。 本节思维导图: 思维导图...

刘成 2475

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java技术——Java多线程学习

0.前言 转载请标明出处:http://blog.youkuaiyun.com/seu_calvin/article/details/52400927 学习多线程之前需要先了解以下几个概念。 进程:一般指一个程序运行时的实例,每个进程有自己独立的地址空间。一个进程无法直接访问另一个进程的数据。 线程:是CPU调度的最小单元,一个进程可以有很多线程,每条线程可以并行执行不同的任务。并且每个线程有独立的运...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

【java基础】多线程(超详细)

在本文中,介绍了java线程的基本知识,包括线程的创建与启动、线程的生命周期等内容

weixin_44571502的博客 1883

【java】多线程判断全部线程执行结束的方法

1.join() 如果是一个线程,可以使用此方法,多个不合适 2.CountDownLatch 此为并发计数器,每个线程结束后减一(countDown()),countDownLatch.await();//等待所有子线程执行完 public class ImportThread extends Thread { private CountDownLatch threadsSignal; public ImportThread(CountDownLatch threadsSignal) { th...

meng_xiaohua的博客 3079

记JAVA中多线程保证同时启动及全部结束判断方法

一般意义上,线程是计算机中任务或者调度的最小单位。而我们需要同时进行多个任务或者调度的时候就想到了并发问题,解决小并发的时候我们可以采用多线程的方式。 多线程的实现方式一共有三种,实现Runable接口,集成Thread类以及使用ExecutorService、Callable、Future实现有返回结果的多线程。在这里不做详细介绍。 多线程的实现 本文的多线程主要使用实现接口的方式。首先来看具体的实现代码: 线程类 import java.util.Date; public class MainThrea

南风过境 1138

java学习之多线程篇学习总结

提到多线程,首先要学习一些概念性的词汇,线程和进程,并行和并发。一个正在系统上执行的程序为一个进程,一个进程包含多个线程。线程是操作系统能够进行运算调度的最小单位,多个线程会存在共享数据的情况。并行是实现多任务处理的方式。并行处理可以提高处理速度和效率,因为多个任务可以在同一时刻同时进行处理。在计算机领域,通常是通过多核处理器、GPU等技术来实现并行处理。并行处理的经典例子是在多核处理器上同时进行多个计算任务。多个程序或任务在同一时间段内同时执行的能力。

duehebfbf的博客 1280

Java学习:多线程

线程的回顾学习,个人理解学习,专业理论性知识不强。

weixin_48800764的博客 1825

Java一个线程能否结束另一个永不停止的线程

在Java中停止一个线程有三种办法: 1.正常结束执行; 2.发生异常; 3.被其他线程stop(Java官方不建议) 参考:https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html 为什么Thread.stop弃用? 因为它本质上是不安全的。停...

深度Java 5549

Java多线程学习总结

Java多线程学习总结

2303_80645080的博客 1273

Java 多线程学习

Java 多线程 一、实现多线程 1.1 进程 进程:是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源 1.2 线程 线程:是进程中的单个顺序控制流,是一条执行路径 单线程:一个进程如果只有一条执行路径,则称为单线程程序 多线程:一个进程如果有多条执行路径,则称为多线程程序 1.3 多线程的实现方式 多线程的实现方案有两种: 继承Thread类 实现Runnable接口 方式1:继承Thread类 定义一个MyThread类继承Thread类 在M

hua226的博客 2万+

【Java】多线程学习笔记

进程间通过管道、 共享内存、信号量机制、消息队列通信在java中要想实现多线程,有两种手段,

qq_45775791的博客 1351

java判断线程结束_【转载】Java多线程,判断其他线程是否结束的三种方法

方法1:thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。t.join(); //调用join方法,等待线程t执行完毕t.join(1000); //等待 t 线程,等待时间是1000毫秒。1 public class TestJoin implemen...

weixin_36478866的博客 1461
上一篇: java多线程学习2:sleep、join、interrupt学习
下一篇: java多线程学习4:wait、notify、notifyall。生产者消费者实例
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值