首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java中,怎么安全的结束一个正在运行的线程?【转载】

2012-09-11 
java中,如何安全的结束一个正在运行的线程?【转载】 问题  Java中提供了很多调度线程的方法,上一节介绍了其

java中,如何安全的结束一个正在运行的线程?【转载】
 问题
  Java中提供了很多调度线程的方法,上一节介绍了其中一种控制线程的方法:如何等待一个线程结束。那么如果不希望等待线程结束,而是根据问题的需要随时都要中断线程使其结束,这种对线程的控制方法该如何实现呢?
  解决思路
  首先必须先明确“中断”这个概念的实际含义,这里的中断是指一个线程在其任务完成之前被强行停止,提前消亡的过程。查阅JDK的帮助文档,可以找到这样一个和中断有关的方法:interrupt()。
  它的语法格式如下所示:
  public void interrupt()
  该方法的功能是中断一个线程的执行。但是,在实际使用当中发现,这个方法不一定能够真地中断一个正在运行的线程。下面通过一个例子来看一看使用interrput()方法中断一个线程时所出现的结果。程序代码如下所示:
  

// 例4.4.3 InterruptThreadDemo3.java  class MyThread extends Thread  {  volatile boolean stop = false;  public void run()  {  while(!stop)  {  System.out.println(getName()+' is running');  try  {  sleep(1000);  }catch(InterruptedException e){   System.out.println('week up from blcok...');  stop=true; // 在异常处理代码中修改共享变量的状态  }  }  System.out.println(getName()+' is exiting...');  }  }  class InterruptThreadDemo3  {  public static void main(String[] args) throws InterruptedException  {  MyThread m1=new MyThread();  System.out.println('Starting thread...');  m1.start();  Thread.sleep(3000);   System.out.println('Interrupt thread...:'+m1.getName());  m1.stop=true; // 设置共享变量为true  m1.interrupt(); // 阻塞时退出阻塞状态  Thread.sleep(3000); // 主线程休眠3秒以便观察线程m1的中断情况  System.out.println('Stopping application...');  }  }

  程序中如果线程m1发生了阻塞,那么虽然执行了m1.stop=true;语句,但是stop的值并未改变。为了能够中断该线程,必须在异常处理语句中对共享变量的值进行重新设置,从而实现了在任何情况下都能够中断线程的目的。
  一定要记住,m1.interrupt();语句只有当线程发生阻塞时才有效。它的作用就是抛出一个InterruptedException类的异常对象,使try…catch语句捕获异常,并对其进行处理。请读者仔细研究这个程序,以便能够看出其中的巧妙之处。

【转载地址】
http://blog.tianya.cn/blogger/post_read.asp?BlogID=3668353&PostID=32699671

热点排行