JAVA中 终止线程的方法介绍

2016-02-19 11:05 12 1 收藏

下面图老师小编跟大家分享JAVA中 终止线程的方法介绍,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~

【 tulaoshi.com - 编程语言 】

在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会失效)

代码如下:

public class SomeThread implements Runnable {

private volatile boolean stop = false;

public void terminate() {

stop = ture;

}

public void run() {

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

while(stop) {

// ... some statements

}

}

}

 

如果线程因为执行sleep()或是wait()而进入Not Runnable状态,假如是wait() 用标志位就方法就不行了,

public final void wait(long timeout)
                throws InterruptedException此方法导致当前线程(称之为 T)将其自身放置在对象的等待集中,然后放弃此对象上的所有同步要求。即当前线程变为等待状态

wait() 的标准使用方法

synchronized(obj){

while(不满足条件){

obj.wait();

}

满足条件的处理过程

}

而您想要停止它,您可以使用第三种即

3 使用interrupt(),而程式会丢出InterruptedException例外,因而使得执行绪离开run()方法,

例如:

 代码如下:

public class SomeThread {

public static void main(String[] args)

{

Thread thread=new Thread(new Runnable(){

public void run() {

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 while (!Thread.interrupted()) {
                // 处理所要处理的工作
                try {
                   

System.out.println("go to sleep");

Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
               

System.out.println("i am interrupted!");
                }

});

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

thread.start();

thread.interrupt();

}

}

执行结果为:

go to sleep

i am interrupted!

来源:http://www.tulaoshi.com/n/20160219/1596506.html

延伸阅读
线程组 线程是被个别创建的,但可以将它们归类到线程组中,以便于调试和监视。只能在创建线程的同时将它与一个线程组相关联。在使用大量线程的程序中,使用线程组组织线程可能很有帮助。可以将它们看作是计算机上的目录和文件结构。 !-- frame contents -- !-- /frame contents -- 线程间发信 ...
一 Java 语言的
Swing API的设计目标是强大、灵活和易用。非凡地,我们希望能让程序员们方便地建立新的Swing组件,不论是从头开始还是通过扩展我们所提供的一些组件。 出于这个目的,我们不要求Swing组件支持多线程访问。相反,我们向组件发送请求并在单一线程中执行请求。 本文讨论线程和Swing组件。目的不仅是为了帮助你以线程安全的...
Thread 创建线程的两种方法: 1、定义类继承Thread类,覆写类中的run方法,调用类对象的start方法,start方法启动线程,调用run方法。Thread类用于描述线程;该类定义一个功能run,用于存储线程要运行的代码。 2、定义类实现Runnable接口,覆盖Runnable接口中的方法,通过Thread类建立线程对象,将Runnable接口的子类对象作为实际参数传递给T...
在进行多线程编程中,比较重要也是比较困难的一个操作就是如何获取线程中的信息。大多数人会采取比较常见的一种方法就是将线程中要返回的结果存储在一个字段中,然后再提供一个获取方法将这个字段的内容返回给该方法的调用者。如以下的ReturnThreadInfo类: package threadtest1; /** * * @author shi mingxiang */ public class ReturnTh...

经验教程

835

收藏

29
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部