在Java的多线程编程中,java.lang.Thread类型包含了一些列的方法start(),
stop(),
stop(Throwable) and
suspend(),
destroy() and
resume()。通过这些方法,我们可以对线程进行方便的操作,但是这些方法中,只有start()方法得到了保留。
在Sun公司的一篇文章《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?
》中详细讲解了舍弃这些方法的原因。
如果真的需要终止一个线程,可以使用以下几种方法:
1、让线程的run()方法执行完,线程自然结束。(这种方法最好)
2、通过轮询和共享标志位的方法来结束线程,例如while(flag){},flag的初始值设为真,当需要结束时,将flag的值设为false。(这种方法也不很好,因为如果while(flag){}方法阻塞了,则flag会失效)
<wbr></wbr>
public class SomeThread implements Runnable {
private volatile booleanstop = false;
<wbr></wbr>
public void terminate() {
stop= ture;
}
<wbr></wbr>
public void run() {
while(stop) {
// ... some statements
}
}
}
<wbr></wbr>
<wbr></wbr>
如果线程因为执行sleep()或是wait()而进入Not Runnable状态,假如是wait() 用标志位就方法就不行了,
public final void wait(long timeout)
throws InterruptedException
此方法导致当前线程(称之为
T)将其自身放置在对象的等待集中,然后放弃此对象上的所有同步要求。即当前线程变为等待状态
wait() 的标准使用方法
synchronized(obj){
while(<不满足条件>){
obj.wait();
}
满足条件的处理过程
}
而您想要停止它,您可以使用第三种即
3 使用interrupt(),而程式会丢出InterruptedException例外,因而使得执行绪离开run()方法,
例如:
<wbr></wbr>
public class SomeThread {
<wbr></wbr>
public static void main(String[] args)
{
Thread thread=new Thread(new Runnable(){
<wbr></wbr>
public void run() {
while (!Thread.interrupted()) {
// 处理所要处理的工作
try {
System.out.println("go to sleep");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("i am interrupted!");
}
});
thread.start();
thread.interrupt();
}
}
执行结果为:
<wbr></wbr>
go to sleep
i am interrupted!
分享到:
相关推荐
JAVA中 终止线程的方法介绍,需要的朋友可以参考一下
Java线程:线程的调度-终止线程 25 Java线程:线程的调度-守护线程 28 Java线程:线程组 30 Java线程:线程的同步 33 一、 同步方法 35 二、 同步块 36 三、 volatile关键字 38 四、 使用synchronized关键字要注意...
java中 使用interrput 如何终止一个线程
Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 ...9.8 挂起、恢复和终止线程 9.9 计时器线程Timer 9.10 线程联合 9.11 守护线程
主要介绍了Java中终止线程的方法详解的相关资料,需要的朋友可以参考下
主要为大家详细介绍了Java中终止线程的三种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段。不但不是让线程停止运行,反而是继续执行线程的...
本篇文章给大家分享了JAVA中实现终止线程池中正在运行的定时任务的具体步骤和方法,有需要的朋友跟着学习下。
在java语言中,使用多线程技术编程时,提出终止一个线程时不采用stop方法的三个原因,并举例加以证明,最后给出了新的解决方法。在java编程过程中,采用多线程技术可以更好地利用系统资源,减少对用户的响应时间,提高系统...
线程的使用步骤:定义一个线程,创建线程的实例,启动线程,终止线程 主线程:(java中所有的线程都是java.lang.Thread类或者其子类的一个实例) 为什么要定义线程类 系统中进程包含多个线程,CPU通过分配时间片的...
主要为大家详细介绍了Java通过关闭Socket终止线程的相关代码
Java线程如何终止.pdf
主要介绍了Java终止线程实例和stop()方法源码阅读,具有一定借鉴价值,需要的朋友可以参考下
NULL 博文链接:https://waitingkkk-163-com.iteye.com/blog/2232286
主要介绍了Java语言多线程终止中的守护线程实例,具有一定借鉴价值,需要的朋友可以参考下
主要介绍了详解Java编程中线程的挂起、恢复和终止的方法,线程是Java学习中的重点和难点知识,需要的朋友可以参考下
使用标志位终止线程就是定义一个boolean型的标志位 ,在线程的run方法中根据这个标志位是为true还是为false来判断是否终止,这种情况多用于while循环中。 class StopThread extends Thread { //标志位 private ...
主要介绍了JAVA 多线程--interrupt()和线程终止方式的的相关资料,文中代码非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
本资源致力于向您介绍 Java 并发编程中的线程基础,涵盖了多线程编程的核心概念、线程的创建和管理,以及线程间通信的基本方法。通过深入学习,您将建立扎实的多线程编程基础,能够更好地理解和应用多线程编程。 多...