首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java并发编程之线程停止

简介 一般情况下,线程执行完成后就会结束,但有的时候我们可能需要在它正常执行完成前就停止它,可以考虑使用以下三种方法: 使用Thread中stop方法,这个方法已经被标为已废弃,不推荐使用,原因是stop...方法会立即终止线程并释放持有的锁,在多线程情况下可能会导致数据不一致问题。...使用自定义标志停止线程 这里定义了一个变量flag,主线程会在3秒后将flag设置为false,当flag为false时候,run方法里面的循环就会结束,线程也就停止了。...前面介绍两种方式使用起来非常类似,但是中断机制要更强,因为当循环体内出现了Thread.sleep()或者wait()这样操作时,自定义标志方式就只能等阻塞结束。...而这两个方法是可以响应中断。 1.主线程在3秒后更改flag状态,但是线程还处于sleep()阻塞中,需要等到sleep()时间结束也就是10秒后线程才停止

61700
您找到你想要的搜索结果了吗?
是的
没有找到

批量启动停止Java进程

java进程管理程序 命名:jmanager 主要功能:保存当前主机所有Java进程信息,停止Java进程,启动Java进程 解决问题: 公司目前测试环境只有几台虚拟机,没有进行容器化管理,系统采用分布式架构...,需要部署程序很多。...一旦虚拟机重启或者故障就要适用Jenkins重启打包部署非常耗时和麻烦,遂编写该脚本用于定时抓取Java进程启动信息, 一旦出现故障,可以批量停止Java进程或者批量启动Java进程。...进程信息,产生以当前日志命名进程数据文件 python3 main.py stop xxxx.json 解释:关闭所有Java进程 xxxx.json 为第一步产生数据文件 python3 main.py...start xxxx.json 解释:启动所有Java进程 xxxx.json 为第一步产生数据文件 该脚本适用于所有java程序,可以安装在其他环境,但该脚本不负责程序启动或者停止顺序

1.6K20

Java:正确停止线程任务实现方式

---- 前沿 ---- 在Java中没有一种安全抢占式方法来停止线程任务。只有一些协作式机制,使请求取消任务和代码都遵循一种协商好协议。...设置“已请求取消”标志来停止线程任务 ---- 示例:Java17源码中 java.util.stream.AbstractShortCircuitTask 使用volatile boolean canceled...---- 每个线程都有一个boolean类型中断状态: java.lang.Thread#interrupted /* Interrupt state of the thread - read/written...注意:调用interrupt()方法并不意味着立即停止目标编程正在进行工作,而只是传递了请求中断消息。 使用静态interrupted()方法时应该小心,因为它会清除当前线程中断状态。...示例: ch.qos.logback.core.net.server.RemoteReceiverStreamClient#run 小结 ---- 正确停止线程任务实现方式: 1、设置“已请求取消

24930

Java停止线程3种方式

Java停止线程实现方法有以下 3 种: 自定义中断标识符,停止线程。 使用线程中断方法 interrupt 停止线程。 使用 stop 停止线程。...其中 stop 方法为 @Deprecated 修饰过期方法,也就是不推荐使用过期方法,因为 stop 方法会直接停止线程,这样就没有给线程足够时间来处理停止保存工作,就会造成数据不完整问题...2.interrupt中断线程 使用 interrupt 方法可以给执行任务线程,发送一个中断线程指令,它并不直接中断线程,而是发送一个中断线程信号,把是否正在中断线程主动权交给代码编写者。...在最新版本 Java 中,此方法已经被直接移除了,所以强烈不建议使用。...; 最后是 stop 方法,虽然它也可以停止线程,但此方法已经是过时不建议使用方法,在 Java 最新版本中已经被直接移除了,所以不建议使用。

64510

如何优雅地停止Java进程

目录 理解停止Java进程本质 应该如何正确地停止Java进程 如何注册关闭钩子 使用关闭钩子注意事项 信号量机制 总结 理解停止Java进程本质 我们知道,Java程序运行需要一个运行时环境...因此,所谓停止Java进程,本质上就是关闭JVM。 那么,哪些情况会导致JVM关闭呢? ? 应该如何正确地停止Java进程 通常来讲,停止一个进程只需要杀死进程即可。...综上所述: 除非非常确定不需要在Java进程退出之前执行收尾工作,否则强烈不建议使用kill -9这种简单暴力方式强制停止Java进程(除了系统关机,系统Crash,断电,和Runtime.halt...System.exit():通常我们在程序运行完毕之后调用,这是在应用代码中写死,无法在进程外部进行调用。...main函数就已经结束了,仅会运行ShutdownHook线程中run()方法代码

6K31

Java 多线程学习(2)——停止线程

重新系统学习一下Java多线程部分。参考书籍为《java多线程编程核心技术》。...在Java中,有以下三种方法可以终止正在运行线程: 使用退出标志,使线程正常退出,即run方法完成后,线程终止; 使用stop方法,强行终止线程,不推荐使用,可能会产生不可预料后果; 使用interrupt...使用interrupt方法停止线程 interrupt()方法仅仅是在当前线程中打了一个停止标记,并不会真正停止线程。...可以看出调用interrupt方法并没有停止线程。...判断线程是否是停止状态 Thread.java类中提供了两种方法判断线程是否是停止状态: this.interrupted():测试当前线程是否已经中断。执行后具有将状态置清除为false功能。

54930

Java | 如何停止一个线程

【Deprecated v.不赞成;反对;】 以上是JDK提供停止线程方法, 但是很早就被废弃了; 主要就是说线程被直接停止掉是不安全, 涉及到了很多锁之类细节问题;【下面细说】 所以不能直接简单地停止线程...有代码拿着这个线程引用去调用了interrupt()这个方法, 那么这个sleep()就会被中断掉, 这个时候就会抛出中断异常 InterruptedException, catch中就可以捕获了...()既然是一个非静态方法, 那它底层是需要引用到其对应一个Java线程对象【java_thread】; 所以isInterrupted()被调用时候, 它底层首先是找到java_thread...(), 【区别于Javainterrupted()和isInterrupted()】 可以看到实际上, Interrupted()中除了多了一句清空当前中断状态代码之外, 其他实际跟IsInterrupted...interrupt()源码本质, 就是对self【java线程对应底层线程对象】加了个锁, 然后把中断状态位interrupted_置为true; ?

1.8K20

安全优雅地停止Java线程

这道问题背后,可以很小,小到只是简单终止一个Thread线程,也可以很大,大到例如Dubbo应用优雅下线......它们其实都有一个共同之处,即非一刀断式地暴力停止某个进程或者线程,而是能够实现在终止过程中...,有机会去清理资源,跑完剩余任务,最后没有任何资源在运行了,才做最后结束,这才算安全而优雅地停止。...在Java多线程当中,停止线程方法,其中,有一个已经过期而不建议使用方式stop(),它停止线程方式比较简单粗暴,不保证线程资源正常释放就直接停止了,也就意味着,可能还有线程正在跑,没有运行完成...true,即可结束该线程,同时,停止资源i++继续运行 while (!...,很类似volatitle变量可见性,反过来,volatitle某种程度上也可以替代interrupt()来判断线程是否需要中断,类似代码如下—— public static void main(String

71140

天了噜,Java 8 要停止维护了!

以下是 Oracle 官网提示 JDK8 终止更新公告。...SE 8商业使用进一步更新下载。...那些需要持续获取安全bug修复和安全补丁以及Java SE 8或以前版本稳定性支持可以通过Oracle Java SE高级版,Oracle Java SE高级桌面,或Oracle Java SE套件...公开更新路线图如下: *:表示支持最晚日期; ** 和 ***:大概意思就是这是一个周期很短版本,用户很快会切换到另外一个可用更新版; ****:Oracle在2017年12宣布了会发布更简单快速发布路线图...现在要做就是赶紧熟悉 Java 9,不然就付费吧,妈蛋,Java 8 相信很多人到现在都没用熟。。。 Java要被 Oracle 玩死了吗?大家有何感想?

78240
领券