JAVA中 终止线程的方法

  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() {

  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() {

  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();

  }

  }

  执行结果为:

  go to sleep

  i am interrupted!

时间: 2024-11-11 20:44:35

JAVA中 终止线程的方法的相关文章

JAVA中 终止线程的方法介绍_java

在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? >中详细讲解了舍弃这些方

Java中终止线程的三种方法_java

Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经被废弃,使用它们是极端不安全的! 1.线程正常执行完毕,正常结束 也就是让run方法执行完毕,该线程就会正常结束. 但有时候线程是永远无法结束的,比如while(true). 2.监视某些条件,结束线程的不间断运行 需要while()循环在某以特定条件下退出,最直接的办法就是设一个boolean标志,并通过设置这个标志来控制循环

关于Java中停止线程执行的方法总结

Java中停止线程执行的方法 一.暂停或停止线程的理论 在Java编程中,要暂停或停止当前正在运行的线程,有几种方法.对于把线程转入睡眠Sleep状态,使用Thread.sleep()是最正确的方式.或许有人会问,为什么不使用等待wait()或通知notify()?要知道,使用等待或通知都不是很好的方式.线程可以使用等待wait()实现被阻塞,这属于条件等待的方式,当条件满足后,又会从阻塞转为等待状态.尽管可以在等待wait()条件那里放一个超时设置,但等待wait()的设计目的不是这样的,等待

Java中的线程Thread总结

首先来看一张图,下面这张图很清晰的说明了线程的状态与Thread中的各个方法之间的关系,很经典的! 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口. 要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构造方法.可通过这种方法实现多个线程的资源共享. 线程的生命周期: 1.新建状态(New):用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存 2.就绪状态

java中的线程

编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:synchronized 本文将对以上内容进行讲解. 一:run()和start() 示例1: public class threadtest extends thread{public void run(){for(int i=0;i<10;i++){system.out.print(" &q

java中基于线程池和反射机制实现定时任务

文章标题:java中基于线程池和反射机制实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10949925 作者: javaboy2012 Email:yanek@163.com qq:    1046011462       直接上代码:   主要包括如下实现类: 1. Main类: 任务执行的入口: 调用main方法,开始加载任务配置并执行任务   package com.yanek.task; import java.util.

java中如何让setText方法读取指定标签数据的时候特意空出一点点空间

问题描述 java中如何让setText方法读取指定标签数据的时候特意空出一点点空间 如何让setText方法读取指定标签数据的时候特意空出一点点空间java当中 解决方案 http://zhidao.baidu.com/link?url=znfx-j9HEz7fJS4EcXcc-gX096uqEKQMTQo4vBNrc9bhRAlFHGGxkAP8cPTOkATWxy3DqxQwhBwFAscWkNPxe_,用空字符串占位置看看可不可以也就是字符串前面有空格,后面有空格. 解决方案二: 使用全

在Java中进行事务处理的方法

摘要 本文介绍在Java中进行事务处理的方法,通过实例分别讲述了如何采用JavaBean.Ejb组件实现J2EE应用服务器支持的JDBC事务.JTA(Java Transaction API)事务. 关键词 JavaBean,EJB, 数据库,事务处理,JTA JavaBean JavaBean是用Java语言编写的与平台无关的组件.它是描述Java的软件组件模型,有点类似于Microsoft的COM组件的概念.在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaB

java中String的一些方法深入解析

以下是对java中String的一些方法进行了详细的分析介绍,需要的朋友可以参考下   1.public String(char[] c,begin,length).从字符数组c的下标begin处开始,将长度为length的字符数组转换为字符串. begin与length可以省略,即将字符数组c转换为字符串.另:字符数组可改为字节数组byte[] b.char[] c=new char[]{'j','y','6','a','4','t','9'}; String s1=new String(c)