java 如何杀线程,您如何杀死Java中的线程?
如何杀死Java中的java.lang.Thread ?
#1楼
在Java中,不会杀死线程,但是以协作方式完成线程的停止。 要求线程终止,然后线程可以正常关闭。
通常使用一个volatile boolean字段,线程将其设置为相应的值时会定期检查并终止。
我不会使用boolean来检查线程是否应该终止 。 如果您将volatile用作字段修饰符,则此方法将可靠运行,但是如果您的代码变得更加复杂,而在while循环中使用其他阻塞方法,则可能会发生,您的代码根本不会终止或至少需要更长的时间如您所愿。
某些阻止库方法支持中断。
每个线程都有一个布尔标志中断状态 ,您应该利用它。 可以这样实现:
public void run() {
try {
while (!interrupted()) {
// ...
}
} catch (InterruptedException consumed)
/* Allow thread to exit */
}
}
public void cancel() { interrupt(); }
源代码来自Java Concurrency in Practice 。 由于cancel()方法是公共的,因此您可以让另一个线程根据需要调用此方法。
#2楼
问题相当模糊。 如果您的意思是“我该如何编写程序以使线程在需要时停止运行”,那么各种其他响应都应该有所帮助。 但是,如果您的意思是“我的服务器出现紧急情况,我现在无法立即重启,而我只需要一个特定的线程就死了,可能会发生什么”,那么您需要一个干预工具来匹配jstack类的监控工具。
为此,我创建了jkillthread 。 请参阅其使用说明。
#3楼
有一种方法可以做到。 但是,如果您必须使用它,则说明您是一个不好的程序员,或者您正在使用一个由不好的程序员编写的代码。 因此,您应该考虑停止成为一个不良的程序员或停止使用此不良代码。 此解决方案仅适用于别无选择的情况。
Thread f =
Method m = Thread.class.getDeclaredMethod( "stop0" , new Class[]{Object.class} );
m.setAccessible( true );
m.invoke( f , new ThreadDeath() );
#4楼
没有办法优雅地杀死线程。
您可以尝试中断线程,一种常见策略是使用毒药向线程发送消息以使其自行停止
public class CancelSupport {
public static class CommandExecutor implements Runnable {
private BlockingQueue queue;
public static final String POISON_PILL = “stopnow”;
public CommandExecutor(BlockingQueue queue) {
this.queue=queue;
}
@Override
public void run() {
boolean stop=false;
while(!stop) {
try {
String command=queue.take();
if(POISON_PILL.equals(command)) {
stop=true;
} else {
// do command
System.out.println(command);
}
} catch (InterruptedException e) {
stop=true;
}
}
System.out.println(“Stopping execution”);
}
}
}
BlockingQueue queue=new LinkedBlockingQueue();
Thread t=new Thread(new CommandExecutor(queue));
queue.put(“hello”);
queue.put(“world”);
t.start();
Thread.sleep(1000);
queue.put(“stopnow”);
#5楼
突然终止线程的尝试是众所周知的不良编程实践,也是不良应用程序设计的证据。 多线程应用程序中的所有线程都显式和隐式共享同一进程状态,并被迫相互协作以使其保持一致,否则,您的应用程序将容易出现难以诊断的错误。 因此,开发人员有责任通过仔细而清晰的应用程序设计保证这种一致性。
对于受控线程终止,有两种主要的正确解决方案:
使用共享易失性标志
使用Thread.interrupt()和Thread.interrupted()方法对。
可以在以下位置找到有关突然线程终止的问题的详尽详尽说明,以及受控线程终止的错误和正确解决方案的示例:
java 如何杀线程,您如何杀死Java中的线程?相关推荐
- java线程池怎么创建_java中的线程池,如何创建?
Java中的线程池它是线程的容器,或者(换句话说,它是具有执行任务能力的线程的集合). 我们可以使用ThreadPool框架来定位(或实现)线程池. 线程池可以包含多个线程.每当我们执行任何任务时,线 ...
- java中线程的生命周期_Java中的线程生命周期– Java中的线程状态
java中线程的生命周期 Understanding Thread Life Cycle in Java and Thread States are very important when you a ...
- java异步线程数_spring异步service中处理线程数限制详解
情况简介 spring项目,controller异步调用service的方法,产生大量并发. 具体业务: 前台同时传入大量待翻译的单词,后台业务接收单词,并调用百度翻译接口翻译接收单词并将翻译结果保存 ...
- 如何查找历史线程阻塞原因_java并发编程-线程状态,线程阻塞方式,阻塞中的线程如何终止?...
前面的例子通过volatile boolean来让任务终止,那么如果任务阻塞了? 如何终止它?本文来看下,参考think in java . 线程的状态 1.new:线程创建后的短暂状态,其分配系统资 ...
- android 线程池 怎么用,android中的线程池 怎么用
满意答案 qpierq0n5 2016.05.02 采纳率:52% 等级:13 已帮助:8164人 //在Android中实现线程池,首先需要实现一个线程工厂(ThreadFactory)的子类 ...
- c语言数据库线程池,C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...
typedef struct { }LoanInfos; typedef struct{ int cp;//主线程编号 int thread;//线程编号 long int time; int arr ...
- C# 线程手册 第二章 .NET 中的线程 线程的优势
额,我猜你现在可能会这么想"既然线程会对我的程序产生负面影响,那么我为什么要使用它呢?".其实问题的关键不在于到底用不用线程,而在于何时何地使用线程.知道在什么情况下应该使用线程是 ...
- python进程线程协程区别_Python中 进程 线程 协程
一.进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在 ...
- python 杀死线程_如何杀死正在运行的线程
我有一个对话框,显示正在运行的线程的进度:from PyQt5.QtWidgets import * from PyQt5.uic import loadUi from PyQt5.QtCore im ...
最新文章
- windows boot files
- ua获取手机型号_无牌山寨手机的数据提取解决方案
- HDU 1559 最大子矩阵
- AngularJS recursive(递归)
- git查看某个文件的修改历史
- SharePoint 2010 大中小架构的部署
- 刷新器-Java EE 7后端十大功能
- 外星人装深度linux,外星人alienware 18笔记本怎么安装win10系统
- 数据的插入、更新、删除
- Altium Designer
- TCGA临床数据整理
- composer require fxp/composer-asset-plugin 失败
- 丰富网页摘要——HTML5中的“微数据”(MicroData)
- 【从零开始的MC服务器】第二步:开服前的准备
- MATLAB算术运算符和常用函数
- 第十六章 Unity 预制件prefab(上)
- 业务对话机器人Rasa核心算法DIET及TED论文详解
- 联想及华硕笔记本重装Windows10系统过程及难点记录
- 如何将 Bash 命令的输出赋值给 Bash 变量
- python双坐标轴箱线图,python绘制双y轴、箱线图、概率分布三种图形及案例
热门文章
- insert --01--insert into 语句的三种写法
- 新闻类客户端代码阅读笔记
- 【Bitmap】Canvas: trying to use a recycled bitmap android.graphics.Bitmap问题
- intersect 相交 范围_Intersect(相交)
- 把房子卖了,把工资发了
- ubuntu加入widdows启动
- Qt 按钮控件虚线框
- 查看RocketMQ的broker启动部分源码分析总结
- 阿里开源支持10万亿模型的自研分布式训练框架EPL
- 63名研究生的微信群被解散,导师发声:和你们没感情,江湖不见