注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 [业内传闻]今天,7月25日..
 帮助

Java:在并发程序中使用枚举TimeUnit管理时间


2008-04-06 16:23:42
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
1.枚举 TimeUnit层次
java.lang.Object
  |——java.lang.Enum<TimeUnit>
      |——java.util.concurrent.TimeUnit
2. 枚举 TimeUnit功能及主要方法
TimeUnit 表示给定单元粒度的时间段,它提供在这些单元中进行跨单元转换和执行计时及延迟操作的实用工具方法。
TimeUnit 主要用于通知基于时间的方法如何解释给定的计时参数。
主要方法有
[1] public void sleep(long timeout) throws InterruptedException
使用此单元执行 Thread.sleep.这是将时间参数转换为 Thread.sleep 方法所需格式的便捷方法。
[2] public void timedJoin(Thread thread, long timeout) throws InterruptedException
使用此时间单元执行计时的 Thread.join。这是将时间参数转换为 Thread.join 方法所需格式的便捷方法。
[3] public void timedWait(Object obj,long timeout) throws InterruptedException
使用此时间单元执行计时的 Object.wait。这是将超时参数转换为 Object.wait 方法所需格式的便捷方法。
3.示例
在下面的程序中,启动的线程会sleep一个随机的秒数,该秒数由一个随机数提供,而sleepTimeUnit.SECONDS.sleep(sleepTime);指定。
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
 
public class MyThread implements Runnable {
    private int number;
 
    public MyThread(int num) {
       number = num;
       System.out.println("Create Thread-" + number);
    }
 
    public void run() {
       int sleepTime = new Random().nextInt(10);
       try {
           TimeUnit.SECONDS.sleep(sleepTime);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
       System.out.println("Thread-" + number + " sleep " + sleepTime
              + " seconds");
    }
   
    public static void main(String[] args){
       ExecutorService exec = Executors.newCachedThreadPool();
       for (int i = 0; i < 5; i++)
           exec.execute(new MyThread(i));
       exec.shutdown();
    }
}
结果:
Create Thread-0
Create Thread-1
Create Thread-2
Create Thread-3
Create Thread-4
Thread-3 sleep 0 seconds
Thread-1 sleep 1 seconds
Thread-2 sleep 4 seconds
Thread-4 sleep 4 seconds
Thread-0 sleep 5 seconds

本文出自 “子 孑” 博客,转载请与作者联系!


附件下载:
  MyThread.java




    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: