快速业务通道

Java多线程初学者指南(4):线程的生命周期 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
ends Thread  {   public void run()   {    try    {     sleep(2000);    }    catch (Exception e)    {    }   }  }  public void run()  {   while (true)   System.out.println(new java.util.Date().getTime());  }  public static void main(String[] args) throws Exception  {   MyThread thread = new MyThread();   SleepThread sleepThread = thread.new SleepThread();   sleepThread.start(); // 开始运行线程sleepThread   sleepThread.join();  // 使线程sleepThread延迟2秒   thread.start();   boolean flag = false;   while (true)   {    sleep(5000);  // 使主线程延迟5秒    flag = !flag;    if (flag)     thread.suspend();    else     thread.resume();   }  } }

从表面上看,使用sleep和suspend所产生的效果类似,但sleep方法并不等同于suspend。它们之间最大的一个区别是可以在一个线程中通过suspend方法来挂起另外一个线程,如上面代码中在主线程中挂起了thread线程。而sleep只对当前正在执行的线程起作用。在上面代码中分别使sleepThread和主线程休眠了2秒和5秒。在使用sleep时要注意,不能在一个线程中来休眠另一个线程。如main方法中使用thread.sleep(2000)方法是无法使thread线程休眠2秒的,而只能使主线程休眠2秒。

在使用sleep方法时有两点需要注意:

1.sleep方法有两个重载形式,其中一个重载形式不仅可以设毫秒,而且还可以设纳秒(1,000,000纳秒等于1毫秒)。但大多数操作系统平台上的Java虚拟机都无法精确到纳秒,因此,如果对sleep设置了纳秒,Java虚拟机将取最接近这个值的毫秒。

2.在使用sleep方法时必须使用throws或try{...}catch{...}。因为run方法无法使用throws,所以只能使用try{...}catch{...}。当在线程休眠的过程中,使用interrupt方法(这个方法将在2.3.3中讨论)中断线程时sleep会抛出一个InterruptedException异常。sleep方法的定义如下:

public static void sleep(long millis)  throws InterruptedException public static void sleep(long millis,  int nanos)  throws InterruptedException

Java多线程初学者指南(4):线程的生命周期(3)

时间:2010-02-01 BlogJava 银河使者

三、终止线程的三种方法

有三种方法可以使终止线程。

1.使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。

2.使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。

3.使用interrupt方法中断线程。 

1.使用退出标志终止线程

当run方法执行完后,线程就会退出。但有时run方法是永远不会结束的。如在服务端程序中使用线程进行监听客户端请求,或是其他的需要循环处理的任务。在这种情况下,一般是将这些任务放在一个循环中,如while循环。如果想让循环永远运行下去,可以使用while(true){...}来处理。但要想使while循环在某一特定条件下退出,最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出。下面给出了一个利用退出标志终止线程的例子。

package chapter2; public class ThreadFlag extends Thread {  public volatile boolean exit = false;  public void run()  {   while (!exit);  }  public static void main(String[] args) throws Exception  {   ThreadFlag thread = new ThreadFlag();   thread.start();   sleep(5000); // 主线程延迟5秒   thre

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号