java 怎么停止一个线程
程序员文章站
2022-04-27 22:05:13
...
如何停止java的线程一直是一个开发多线程程序常遇到的一个问题。也有好多人问过我,所以今天在这里总结一下希望可以让更多的人知道在java中如何安全的结束一个正在运行的线程。
在Java的多线程编程中,java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume()。通过这些方法,我们可以对线程进行方便的操作,但是这些方法中,只有start()方法得到了保留。
在JDK帮助文档以及Sun公司的一篇文章《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? 》中都讲解了舍弃这些方法的原因。
那么,我们究竟应该如何停止线程呢?
用共享变量的方式
在这种方式中,之所以引入共享变量,是因为该变量可以被多个执行相同任务的线程用来作为是否中断的信号,通知中断线程的执行。
public class ThreadFlag extends Thread { public volatile boolean exit = false; public void run() { while (!exit); } public static void main(String[] args) throws Exception { ThreadFlag thread = new ThreadFlag(); thread.start(); sleep(3000); // 主线程延迟3秒 thread.exit = true; // 终止线程thread thread.join(); System.out.println("线程退出!"); } }
在上面代码中定义了一个退出标志exit,当exit为true时,while循环退出,exit的默认值为false。在定义exit时,使用了一个Java关键字volatile,这个关键字的目的是使exit同步,也就是说在同一时刻只能由一个线程来修改exit的值。
以上就是java 怎么停止一个线程的详细内容,更多请关注其它相关文章!
推荐阅读
-
oracle数据库查询没问题,正常显示两个汉字;但是java后台Hibernate查询的时候只显示第一个汉字怎么解决?
-
java多线程有序读取同一个文件
-
java中给出一个主线程要join子线程的例子
-
java中给出一个子线程如何捕获主线程异常的例子
-
【Java多线程】使用多线程计算阶乘累加 1!+2!+3!+...+19!+20!。其中一个线程计算阶乘,另一线程实现累加并输出结果
-
怎么用java语言查询读出一个SQLite数据库文件中的数据?
-
eclipse怎么批量替换Java文件某一个单词?
-
面试连环炮系列(十):一个线程调用两次start会怎么样
-
ScheduledExecutorService调度线程池运行几次后停止某一个线程
-
JAVA多线程的一个复习例子(取款同步)(希望大家不要看源代码,看题目自己写出实现)