如何杀死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中的线程?相关推荐

  1. java线程池怎么创建_java中的线程池,如何创建?

    Java中的线程池它是线程的容器,或者(换句话说,它是具有执行任务能力的线程的集合). 我们可以使用ThreadPool框架来定位(或实现)线程池. 线程池可以包含多个线程.每当我们执行任何任务时,线 ...

  2. java中线程的生命周期_Java中的线程生命周期– Java中的线程状态

    java中线程的生命周期 Understanding Thread Life Cycle in Java and Thread States are very important when you a ...

  3. java异步线程数_spring异步service中处理线程数限制详解

    情况简介 spring项目,controller异步调用service的方法,产生大量并发. 具体业务: 前台同时传入大量待翻译的单词,后台业务接收单词,并调用百度翻译接口翻译接收单词并将翻译结果保存 ...

  4. 如何查找历史线程阻塞原因_java并发编程-线程状态,线程阻塞方式,阻塞中的线程如何终止?...

    前面的例子通过volatile boolean来让任务终止,那么如果任务阻塞了? 如何终止它?本文来看下,参考think in java . 线程的状态 1.new:线程创建后的短暂状态,其分配系统资 ...

  5. android 线程池 怎么用,android中的线程池 怎么用

    满意答案 qpierq0n5 2016.05.02 采纳率:52%    等级:13 已帮助:8164人 //在Android中实现线程池,首先需要实现一个线程工厂(ThreadFactory)的子类 ...

  6. c语言数据库线程池,C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...

    typedef struct { }LoanInfos; typedef struct{ int cp;//主线程编号 int thread;//线程编号 long int time; int arr ...

  7. C# 线程手册 第二章 .NET 中的线程 线程的优势

    额,我猜你现在可能会这么想"既然线程会对我的程序产生负面影响,那么我为什么要使用它呢?".其实问题的关键不在于到底用不用线程,而在于何时何地使用线程.知道在什么情况下应该使用线程是 ...

  8. python进程线程协程区别_Python中 进程 线程 协程

    一.进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在 ...

  9. python 杀死线程_如何杀死正在运行的线程

    我有一个对话框,显示正在运行的线程的进度:from PyQt5.QtWidgets import * from PyQt5.uic import loadUi from PyQt5.QtCore im ...

最新文章

  1. windows boot files
  2. ua获取手机型号_无牌山寨手机的数据提取解决方案
  3. HDU 1559 最大子矩阵
  4. AngularJS recursive(递归)
  5. git查看某个文件的修改历史
  6. SharePoint 2010 大中小架构的部署
  7. 刷新器-Java EE 7后端十大功能
  8. 外星人装深度linux,外星人alienware 18笔记本怎么安装win10系统
  9. 数据的插入、更新、删除
  10. Altium Designer
  11. TCGA临床数据整理
  12. composer require fxp/composer-asset-plugin 失败
  13. 丰富网页摘要——HTML5中的“微数据”(MicroData)
  14. 【从零开始的MC服务器】第二步:开服前的准备
  15. MATLAB算术运算符和常用函数
  16. 第十六章 Unity 预制件prefab(上)
  17. 业务对话机器人Rasa核心算法DIET及TED论文详解
  18. 联想及华硕笔记本重装Windows10系统过程及难点记录
  19. 如何将 Bash 命令的输出赋值给 Bash 变量
  20. python双坐标轴箱线图,python绘制双y轴、箱线图、概率分布三种图形及案例

热门文章

  1. insert --01--insert into 语句的三种写法
  2. 新闻类客户端代码阅读笔记
  3. 【Bitmap】Canvas: trying to use a recycled bitmap android.graphics.Bitmap问题
  4. intersect 相交 范围_Intersect(相交)
  5. 把房子卖了,把工资发了
  6. ubuntu加入widdows启动
  7. Qt 按钮控件虚线框
  8. 查看RocketMQ的broker启动部分源码分析总结
  9. 阿里开源支持10万亿模型的自研分布式训练框架EPL
  10. 63名研究生的微信群被解散,导师发声:和你们没感情,江湖不见