Java中终止线程的三种方法

Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经被废弃,使用它们是极端不安全的!

1. 线程正常执行完毕,正常结束

也就是让run方法执行完毕,该线程就会正常结束。

但有时候线程是永远无法结束的,比如while(true)。

2. 监视某些条件,结束线程的不间断运行

需要while()循环在某以特定条件下退出,最直接的办法就是设一个boolean标志,并通过设置这个标志来控制循环是否退出。

public class ThreadFlag extends Thread {

public volatile boolean exit = false;

public void run() {

while (!exit) {

System.out.println("running!");

}

}

public static void main(String[] args) throws Exception {

ThreadFlag thread = new ThreadFlag();

thread.start();

sleep(1147); // 主线程延迟5秒

thread.exit = true; // 终止线程thread

thread.join();

System.out.println("线程退出!");

}

}

3. 使用interrupt方法终止线程

如果线程是阻塞的,则不能使用方法2来终止线程。

public class ThreadInterrupt extends Thread {

public void run() {

try {

sleep(50000); // 延迟50秒

} catch (InterruptedException e) {

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

}

}

public static void main(String[] args) throws Exception {

Thread thread = new ThreadInterrupt();

thread.start();

System.out.println("在50秒之内按任意键中断线程!");

System.in.read();

thread.interrupt();

thread.join();

System.out.println("线程已经退出!");

}

}

java 终止方法_Java中终止线程的三种方法相关推荐

  1. java 不知道类名_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里 ...

  2. java 取名字_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName()返回的是虚拟机里面 ...

  3. java里break的使用方法_Java中break的第三种用法说明

    在Java中,break语句有三种用法,第一种是用于终止switch语句中的语句序列,第二种是用于退出循环,然而第三种是用作goto语句的"文明"形式! 我们知道,goto语句会破 ...

  4. java中三种方法_Java文件I/O的三种方法

    Java文件I/O的三种方法 RandomAccessFile是不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和DataOutput接口之外(Data ...

  5. java当前时间_java 获取当前时间的三种方法

    总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响, ...

  6. java json的使用方法_JAVA编写JSON常用的三种方法

    JAVA编写JSON常用的三种方法 Szx • 2019 年 11 月 15 日 1.jsonlib需要引入的包也多,代码也相对多一些. 2.Gson:谷歌的 3.FastJson:阿里巴巴的,这几个 ...

  7. JAVA中创建线程的三种方法及比较

    JAVA中创建线程的方式有三种,各有优缺点,具体如下: 目录 一.继承Thread类来创建线程 二.实现Runnable接口来创建线程 三.通过Callable和Future来创建线程 四.三种方式创 ...

  8. java多线程同步的四种方法_java中实现多线程的两种方法

    java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...

  9. java 复制文件_Java中复制文件的4种方法

    Java拷贝文件是一种非常常见的操作.但是java.io.File类没有任何快捷方法可以将文件从源复制到目标文件.在这里,我们将了解学习可以在java中复制文件的四种不同方法. 方法一:使用Strea ...

  10. java 获取类名_Java中获取类名的3种方法!

    获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonicalName() 返回的是更容易理解的类名表示. g ...

最新文章

  1. php 缺少参数,php - 如何验证JSON响应中是否缺少参数-Laravel 6 - 堆栈内存溢出
  2. 解决XManager连接到HP-UX时出现乱码的问题
  3. 详细分析Memcached缓存与Mongodb数据库的优点与作用
  4. [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册
  5. 扩展AD 用户上传头像
  6. IOS APP Store下载链接
  7. 技术总监之路——App项目开发流程
  8. 虚拟机中linux连网,虚拟机Linux上网的方法
  9. Android 手机上利用adb shell模拟手机相关操作
  10. 关于动态抽样(Dynamic Sampling)
  11. tensorflow语义分割计算mIoU时忽略某一类别
  12. 深入学习三个月向大厂发起冲击
  13. 【Qt】Q_INIT_RESOURCE的使用
  14. SQLServer As
  15. bread是可数还是不可数_学了20年英语才明白:bread为什么是不可数名词?
  16. 王道机试指南NO.8最大公约数
  17. 海思35XX系列芯片型号规律
  18. JAVAWEB开发之工作流详解(一)——Activiti的环境搭建、插件安装、核心API
  19. 组装电脑配置推荐2022
  20. 关于图像变换的总结(仿射变换,刚体变换等)

热门文章

  1. IE兼容性小结(IE7及以上版本)
  2. SQLite学习和使用
  3. CentOS 大量的TIME_WAIT解决方法
  4. Android退出程序时的再按一次退出实现
  5. 统计文件大小与文件行数
  6. 怎么将电脑中的声音录制成WAV格式
  7. 怎么打开/查看MySQL的SQL记录
  8. Linux下启动、停止J2SE程序(脚本)
  9. 842. 将数组拆分成斐波那契序列
  10. 2-7 hash(2)