快速业务通道

如何停止java线程 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

如何停止java线程

时间:2011-04-16 博客园 逖靖寒

简介

在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? 》中详细讲解了舍弃这些方法的原因。那么,我们究竟应该如何停止线程呢?

建议使用的方法

在《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? 》中,建 议使用如下的方法来停止线程:

private volatile Thread blinker;      public void stop() {          blinker = null;      }      public void run() {          Thread thisThread = Thread.currentThread();          while (blinker == thisThread) {              try {                  thisThread.sleep(interval);              } catch (InterruptedException e){              }              repaint();          }      }

关于使用volatile关键字的原因,请查看 http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#36930。

当线程处于非运行(Run)状态

当线程处于下面的状况时,属于非运行状态:

* 当sleep方法被调用。

*当wait方法被调用。

*当被I/O阻塞,可能是文件或者网络等等。

当线程处于上述的状态时,使用前面介绍的方法就不可用了。这个时候,我们可以使用 interrupt()来打破阻塞的情况,如:

public void stop() {          Thread tmpBlinker = blinker;          blinker = null;          if (tmpBlinker != null) {             tmpBlinker.interrupt();          }      }

泌採唯峭java?殻(2)

扮寂:2011-04-16 鴬人坩 縣掌混

輝interrupt()瓜距喘議扮昨?InterruptedException繍瓜砺竃?侭參低辛參壅run圭隈嶄 俺資宸倖呟械?斑?殻芦畠曜竃?

try {     ....     wait(); } catch (InterruptedException iex) {     throw new RuntimeException("Interrupted",iex); }

怦毘議I/O

輝?殻瓜I/O怦毘議扮昨?距喘interrupt()議秤趨頁卆正嚥糞縞塰佩議峠岬議。壓 Solaris才Linux峠岬貧繍氏砺竃InterruptedIOException議呟械?徽頁Windows貧中音氏嗤宸 嶽呟械。侭參?厘断侃尖宸嶽諒籾音嬬卆真噐峠岬議糞?。泌?

package com.cnblogs.gpcuster import java.net.*; import java.io.*; public abstract class InterruptibleReader extends Thread {      private Object lock = new Object( );      private InputStream is;      private boolean done;      private int buflen;      protected void processData(byte[] b, int n) { }      class ReaderClass extends Thread {          public void run( ) {              byte[] b = new byte[buflen];              while (!done) {                  try {                      int n = is.read(b, 0,  buflen);                      processData(b, n);                  } catch (IOException ioe) {  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号