java多线程正确关闭的方法

多线程与主程序同步执行:Java线程池与Future实践 使用Callable和Future可以让Java中的异步任务执行更加灵活和强大。Callable定义了可以产生结果的任务,而Future则提供了获取这些结果的机制。通过,我们可以轻松地提交Callable任务,并通过Future来管理这些任务的执行和结果获取。记住,在使用Future获取结果时,适当的异常处理是必要的,以确保应用程序的稳定性。通过本章的讲解,我们了解了如何利用Java并发API中的Callable和Future。 阅读详情

假如说有两个线程,其中有一个线程对一块内存加了锁,那么另一个线程再同样访问这块内存时候就会被堵塞,一旦前一个线程暂停了,那么就凉了。
假如说有两个线程,其中有一个线程在写数据的时候突然停止了,那么这块数据还可能未来的及清理,后者线程去操作内存就会出现异常,那么也凉了。
结束线程并非是本意,实则是结束任务。只要任务结束那就结束了。
那么中断的方法一般采用interrupt或boolean标志位
判断线程是否中止采用isInterrupted,

如果线程中有Thread.sleep方法,当设置中断后,执行这个方法会抛出异常,就务必在异常中继续关闭线程

Thread thread = null;
thread = new Thread(new Runnable() {
    @Override
    public void run() {
        /*
         * 在这里为一个循环,条件是判断线程的中断标志位是否中断
         */
        while (true&&(!Thread.currentThread().isInterrupted())) {
            try {
                Log.i("tag","线程运行中"+Thread.currentThread().getId());
                // 每执行一次暂停40毫秒
                //当sleep方法抛出InterruptedException  中断状态也会被清掉
                Thread.sleep(40);
            } catch (InterruptedException e) {
                e.printStackTrace();
                //如果抛出异常则再次设置中断请求
                Thread.currentThread().interrupt();
            }
        }
    }
});
thread.start();
//触发条件设置中断
thread.interrupt();

boolean标志位,注意volatile,保证线程间的boolean一致性

public static volatile boolean exit =false;  //退出标志
    public static void main(String[] args) {
        new Thread() {
            public void run() {
                System.out.println("线程启动了");
                while (!exit) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("线程结束了");
            }
        }.start();
        try {
            Thread.sleep(1000 * 5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        exit = true;//5秒后更改退出标志的值,没有这段代码,线程就一直不能停止
    }

区别

需要系统方式时用interrupt
其他情况用boolean

Altium Designer应用技巧13: 四层板的拼版方法 本文介绍在Altium Designer中,进行4层板的拼版方法。Altium Designer有多种拼版方法,本文选择最直观的复制、删帖方法来完成,步骤如下: 1、看一下原始文件,如下图所示,我们要对该板进行拼版操作。 2、通过菜单“报告”-“板子信息”得到板子大小,在这里一般切换为mm比较好操作,我们可以使用快捷键"q"。 3、如果是水平拼版,我们需要关心水平长度;如果是垂直拼版... 阅读详情

相关推荐

CTP Python API及Demo(利用Swig 封装)Windows版(6.6.1traderapi)

环境:visual studio2015、python3.9、 参考的是景色大神的教程自己制作,因为直接用它编译好的无法使用,遂自己编译。 从CTP官网上下载CTP API点击下载。这里用的版本是v6.6.1_P1_tradeapi,想使用不同的版本下载即可: 安装Swig软件,本文中所用的Swig是swigwin-4.0.2版本,点击下载。下载后解压,将swig路径添加到环境变量中。 安装python,注意要安装64位版本,将环境变量配置好。本文所用的是3.9版本。 通过Swig得到pyth.

ProgramVAE的博客 2543

e.printStackTrace()

catch(Exception e){ e.printStackTrace() ; } 当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。e是此对象引用名称。然后e(引用)会自动调用Exception类中指定的方法,也就出现了e.printStackTrace() ;。 pri...

麦子的博客 1万+

高速设计注意事项总结——MDI篇

在以太网高速通信系统中,MDI(Medium Dependent Interface,介质相关接口)是连接物理层芯片(PHY)与传输介质(如网线)的关键接口,其设计直接影响信号完整性、传输速率和抗干扰能力。本文围绕 MDI 及 RJ45 接口电路、关键参数、设计与布线要点展开,为高速以太网设计提供参考。本文包含MDI 及 RJ45 接口电路组成、电路设计注意事项、布局布线要求等内容

qq_16237389的博客 1445

Java的printStackTrace

Java中的方法是Throwable类的一个公共方法,它用于打印异常(Exception)或错误(Error)的栈追踪信息到标准错误流(System.err当程序抛出异常或错误,并被捕获后,可以使用方法输出详细的调用栈信息,这在调试程序时非常有用,因为它可以帮助开发者确定异常发生的位置和原因。当异常发生时,JVM(Java虚拟机)会记录下抛出异常时的调用栈信息。方法会打印出这个信息,它包括了异常发生的序列,从发生异常的方法开始,一直追溯到调用栈的最顶端。下面是这里的输出表示异常的类型是,异常信息是。

weixin_63490470的博客 4793

MAX31856高精度热电偶测温系统实战:从寄存器配置到温度读取

本文详细介绍了MAX31856高精度热电偶测温系统的实战应用。从硬件连接避坑、核心寄存器配置(如CR0、CR1),到利用中断高效读取并解析温度数据,提供了完整的驱动框架和代码示例。该方案解决了传统热电偶信号微弱、非线性及冷端补偿难题,适用于工业测温等场景,帮助开发者快速实现稳定可靠的高精度温度测量。

coffee的博客 485

视图库对接系列(GA-T 1400)一、简单介绍

GA/T 1400《公安视频图像信息应用系统》 是我们需要参考看看的相关文档,里面有对应的标准和介绍,没有这个文档的话可以加群找我要。群的话 我放在最下面了。我们先简单想几个问题, 也就是这个协议主要干什么用的,为什么要有, 能做什么。

qq_37716298的博客 4286

java 中的printStackTrace()方法

try{ … } catch(Exception e) { e.printStackTrace() ; } 当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。e是此对象异常名称。然后e(引用)会自动调用Exception类中指定的方法,也就出现了e.printStackTrace();。printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。.

qq_42990803的博客 1万+

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3262

java:printStackTrace()方法

printStackTrace()方法一般与抛出异常搭配使用,效果是打印出异常位置。 try{           .....   }    catch(Exception e)   {          e.printStackTrace() ;    }     同样System.out.println(e)也可以与抛出异常搭配使用,且打印出更加详细

include_ice的博客 5053

你的小程序地图功能还只是“摆设”吗?支付宝地图API的深度玩法都在这里了!

🏆本文收录于《滚雪球学支付宝小程序开发》专栏,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1820

代码的自由之旅:用AI写出无版权烦恼的Verilog

他们还基于这个数据集,训练了一个名叫“FreeV”的AI模型,不仅能写出好用的Verilog代码,还把版权侵权的风险降到了仅3%。为了让AI安全地写Verilog,研究团队提出了三个“法宝”:一个检测AI是否会生成侵权代码的测试方法、一个干净的Verilog数据集FreeSet,还有一个基于FreeSet训练的AI模型FreeV。AI的记忆力超强,能记住训练时见过的代码。测试发现,一些用Verilog数据训练过的AI,比如VeriGen,生成侵权代码的概率从9%涨到了15%,说明它们可能学了不该学的代码。

步子哥的博客 1810

printstacktrace方法_java多线程正确关闭的方法

假如说有两个线程,其中有一个线程对一块内存加了锁,那么另一个线程再同样访问这块内存时候就会被堵塞,一旦前一个线程暂停了,那么就凉了。假如说有两个线程,其中有一个线程在写数据的时候突然停止了,那么这块数据还可能未来的及清理,后者线程去操作内存就会出现异常,那么也凉了。结束线程并非是本意,实则是结束任务。只要任务结束那就结束了。那么中断的方法一般采用interrupt或boolean标志位判断线程是否...

weixin_29737443的博客 852

【python基础】一文掌握 Jupyter Notebook 的使用(超级详细!)

是一个非营利组织,致力于为多种编程语言的交互式计算开发开源软件、开放标准和服务。Jupyter 于 2014 年由 Fernando Pérez 从IPython衍生出来,支持几十种编程语言的执行环境。Jupyter 项目主要开发并支持(.ipynb 文件格式)、JupyterHub和JupyterLab等交互式计算产品。

数据知道的博客 1万+

java停止 多线程_java多线程正确关闭的方法

假如说有两个线程,其中有一个线程对一块内存加了锁,那么另一个线程再同样访问这块内存时候就会被堵塞,一旦前一个线程暂停了,那么就凉了。假如说有两个线程,其中有一个线程在写数据的时候突然停止了,那么这块数据还可能未来的及清理,后者线程去操作内存就会出现异常,那么也凉了。结束线程并非是本意,实则是结束任务。只要任务结束那就结束了。那么中断的方法一般采用interrupt或boolean标志位判断线程是否...

weixin_42299645的博客 635

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java对ServerSocket的开启和关闭

1.因为当第一个客户端连接之后,服务端会一直读取数据造成阻塞,所有只能第一个客户端主动断开连接之后才能处理下一个客户端数据,我们可以用多线程的方式来同时处理多个客户端连接的信息。//强制关闭所有的tcp客户端连接,关闭的时候流读取不到数据会报错,捕捉异常后break。//强制关闭所有的tcp客户端连接,关闭的时候流读取不到数据会报错,捕捉异常后break。System.out.println("tcp" + port + "端口启动成功,等待客户端连接...");//实时的tcp所有的客户端连接信息。

weixin_59331533的博客 2012

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java多线程的ExecutorService

为什么80%的码农都做不了架构师?>>> ...

weixin_34050389的博客 125

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA多线程

Process (进程) destroy (摧毁) month (月) simpleDateFormat。一个应用程序就对应一个进程,拥有分配资源的权利,为了完成一个进程中的多个对象的控制,一个进程分为了多个线程。关闭线程:不要强制关闭,而是通过设置标志等方法让线程中的代码自然执行完毕,例如,通过标志跳出循环。Lock (锁) Condition (监视器) Signal (唤醒销售者)//唤醒同一个锁上的其他的所有线程。Ctrl + Shift + /:选中代码注释,多行注释,再按取消注释。

2502_90724371的博客 296

process java 关闭_如何从java.lang.Process关闭适当的std流?

这个问题是关于java.lang.Processstdin,stdout和stderr及其处理的。我们的项目中有一个课程是对的扩展org.apache.commons.io.IOUtils。这里有一个安静的新方法来关闭适当的Process-Object的std流吗?还是不合适?/*** Method closes all underlying streams from the given Proc...

weixin_31478029的博客 564

【008】Java程序中正确地停止一个线程?

Java线程停止的正确方法应遵循协作式原则,避免使用废弃的暴力方法(如stop()、suspend())。推荐4种优雅停止方式: 协作式中断:通过interrupt()设置中断标志,线程主动检查isInterrupted()并安全退出(需处理InterruptedException)。 自定义标志位:使用volatile boolean变量控制线程终止,确保可见性。 避免阻塞场景:注意线程在阻塞方法(如sleep())中的中断处理。

编程技术圈 1073

java超大文件拆分发送,将一个大文件拆分为多个InputStream,以Java多线程处理

My codes:public ArrayList getAllInputStreams() {ArrayList allStreams = new ArrayList();InputStream stream = this.getNext();while (stream != null) {allStreams.add(stream);stream = this.getNext();}retur...

weixin_36322984的博客 1232

java FileOutputStream 文件已经被打开

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Java FileOutputStream 文件已经被打开 在 Java 编程中,文件的读写是常见的操作之一。尤其是使用 FileOutputStream 类来进行文件写入时,我们经常会遇...

weixin_36856923的博客 151

java 关闭jdialog_如何用Java代码真正关闭一个JDialog?

我知道setVisible(false),dispose(),但他们不能真正关闭一个JDialog。当我有另一个线程停止时,JDialog的线程仍然运行。如何用Java代码真正关闭一个JDialog?而且我不能使用System.exit(0),因为其他线程需要运行一段时间。下面的代码,我最终通过System.exit(0)在程序结束时解决问题。public class CsUpdateCtrl {...

weixin_35504293的博客 823

java 终止程序_java中终止程序的执行

展开全部在java程序中,可以使用java.lang.System的exit方法来终止程序的执行,publicstaticvoidmain(String[]args){62616964757a686964616fe4b893e5b19e31333363376466System.out.println("开始进入程序...");//dosomethingSystem.out.printl...

weixin_39978101的博客 5343

停止Java线程,小心interrupt()方法

转自http://www.blogjava.net/jinfeng_wang/archive/2008/04/27/196477.html 程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的、难以发现的错误。  在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程。 背景     中断(Interrupt)一个线程意味着在该...

sinat_35738705的博客 189

java flag 用法_Java中,使用volatile修饰开关flag关闭线程,是一种常用的做法

由于线程的interrupt标识很有可能被擦除,或者逻辑单元中不会调用任何可中断方法,所以使用volatile修饰的开关flag关闭线程也是一种常用的做法,具体如下:package com. wangwenjun. concurrent. chapter03;import java. util. concurrent. TimeUnit;public class FlagThreadExit{st...

weixin_39531635的博客 333

多线程-多线程方式3的思路及代码实现:方式3依赖于线程池存在的

package cn.itcast_09; import java.util.concurrent.Callable; //Callable:是带泛型的接口。 //这里指定的泛型其实是call()方法的返回值类型。 public class MyCallable implements Callable { @Override public Object call() throws Exc

兴趣是最好的老师 431
上一篇: JAVA可重入锁死锁
下一篇: rabbimq如何保证数据安全性
huapro.vip
博客等级 码龄15年 36粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值