java终止正在运行的线程_Java再学习——停止一个正在运行的线程

news/2025/2/26 13:26:25

关于这个问题,先了解一下Thread类方法中被废弃的那些方法。suspend(), resume(),stop()/stop(Throwable obj),destroy()

首先,stop(Throwable obj)和destroy()方法在最新的Java中直接就不支持了,没必要去看了。我们只需瞧瞧suspend(), resume(), stop()这三个就行了;

suspend()——让当前线程暂停执行

resume()——让当前线程恢复执行

当调用suspend()的时候,线程并没有释放对象,因此当多线程的时候,如果其他线程要用到某个被suspend的线程占用的对象,就必须要等到它被resume()才可以,而这个过程就极易出现死锁。

所以,they are deprecated!

而stop()是最不应该的,因为你都不知道它的状态就stop()了,释放所有能释放的锁,而且如果run方法存在同步,还不一定能stop~正反方向,这个方法都不适合。

备注:对于废弃的方法本身了解就可以,更多还是要去分析废弃的原因,如果你喜欢进阶的话~

关于停止一个正在运行的线程,官方建议设置变量去关闭。形同如下:

public classAPP {public static void main(String[] args) throwsException {class MyThread extendsThread {boolean flag = true;

@Overridepublic voidrun() {while(flag) {//do something

try{

Thread.sleep(1000);

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println("I'm running!");

}

System.out.println("I'm dead!");

}public voidstopThread() {

flag= false;

}

}

MyThread thread= newMyThread();

thread.start();

Thread.sleep(3000);

thread.stopThread();

}

}

也就是通过设置变量来关闭线程,当然如果你就是执行完一次,那当然就没必要设置变量了,因为这种线程都没必要单独处理停止行为。

其次,这个所说是变量但是这个变量设置还是有很多巧妙的地方,比如下面这中类型:

public classAPP {public static void main(String[] args) throwsException {class MyThread extendsThread {boolean isRunning = true;

@Overridepublic voidrun() {while(isRunning) {//do something

try{

Thread.sleep(1000);

}catch(InterruptedException e) {

System.out.println(e.getMessage());

isRunning= false;

}

System.out.println("I'm running!");

}

System.out.println("I'm dead!");

}

}

MyThread thread= newMyThread();

thread.start();

Thread.sleep(3000);

thread.interrupt();

}

}

基本就是这样操作了~


http://www.niftyadmin.cn/n/4747369.html

相关文章

mysql 5.7 jdbc 8.0_mysql8.0 jdbc连接注意事项

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼url增加参数useSSL 和时区 : jdbc:mysql://localhost:3306/mydb?useSSLfalse&serverTimezoneUTCdriver变化: com.mysql.jdbc.Driver > com.mysql.cj.jdbc.Driver常见错误提示1:如果driver没有添加cj&#xff0c…

java xml路径_java读取xml路径

*内容如下: java 使用相对路径读取 xml 文件: 一、xml 文件一般的存放位置有三个: 1.放在 WEB-INF 下; 2.xml 文件放在/WEB-INF/classes 目录下或 class......JAVA读取xml文件中节点值_计算机软件及应用_IT/计算机_专业资料。pub...使用Java读写XML文档_计算机软件及应用_IT/计…

java string的实现_java有关String操作,实现中间 * 显示

有时,项目中一些用户名要求显示如:t***t,即用户名只显示第一个和最后一个字符,中间用*表示,可使用方法如下:public static void main(String[] args) {String a "testtest";char[] c a.toCharA…

python格式化输出 xz_python之钉钉审批导出

钉钉审批导出需要管理员协助配合并且需要参考钉钉开发文档。1、获取access_token正常情况下access_token有效期为7200秒钉钉开发指南:https://open-doc.dingtalk.com/microapp/serverapi2/eev437appkeyString是应用的唯一标识keyappsecretString是应用的密钥#!/usr/…

cas client java_CAS java client2.1.1 在Tomcat5.5.16下bug的解决

2006-07-19 10:17 | taole版主我按照你的方法试过 ,但是还是会出到访问应用程序后提示输入验证用户名和密码以后就会出现错误页面,异常如下:*************************************HTTP Status 500 ----------------------------------------…

java base64压缩_Base64和Zip数据压缩与解压

压缩图片数据,解压图片数据public class TestZCompress {public static void main(String[] args) {try {File file new File("D://haha.jpg");if (file.exists()) {InputStream in new FileInputStream("D://haha.jpg");byte[] buf new byt…

ast java override_Java调用groovy及groovy中如何使用springBean

一、概述Groovy is a multi-faceted language for the Java platform.Apache Groovy是一种强大的、可选的类型化和动态语言,具有静态类型和静态编译功能,用于Java平台,目的在于通过简洁、熟悉和易于学习的语法提高开发人员的工作效率。它可以…

ElGamal加密算法基础到实现详解

先从数学基础开始 群 群是一个集合G,连同一个运算 "",它结合任何两个元素 a 和 b 而形成另一个元素,记为 a b。符号 "" 是对具体给出的运算,比如加法的一般的占位符。要具备成为群的资格,这个集…