转http://blog.csdn.net/hudashi/article/details/6936604

public enum TimeUnit
extends Enum<TimeUnit>
TimeUnit 表示给定单元粒度的时间段,它提供在这些单元中进行跨单元转换和执行计时及延迟操作的实用工具方法。TimeUnit 不维护时间信息,但是有助于组织和使用可能跨各种上下文单独维护的时间表示形式。
TimeUnit 主要用于通知基于时间的方法如何解释给定的计时参数。

例如,如果 lock 不可用,则以下代码将在 50 毫秒后超时:
  Lock lock = ...;
  if ( lock.tryLock(50L, TimeUnit.MILLISECONDS) ) ...
 而以下代码将在 50 秒后超时:
  Lock lock = ...;
  if ( lock.tryLock(50L, TimeUnit.SECONDS) ) ...
但是注意,不保证特定超时实现能够以与给定 TimeUnit 相同的粒度通知 段。 
从以下版本开始:
    1.5 
枚举常量摘要
MICROSECONDS    微秒   一百万分之一秒(就是毫秒/1000)
MILLISECONDS    毫秒   千分之一秒    
NANOSECONDS   毫微秒  十亿分之一秒(就是微秒/1000)
SECONDS          秒
MINUTES     分钟
HOURS      小时
DAYS      天
主要接口:
 long  convert(long duration, TimeUnit unit)
          将给定单元的时间段转换到此单元。
 void  sleep(long timeout)
          使用此单元执行 Thread.sleep.这是将时间参数转换为 Thread.sleep 方法所需格式的便捷方法。
 void  timedJoin(Thread thread, long timeout)
          使用此时间单元执行计时的 Thread.join。
 void  timedWait(Object obj, long timeout)
          使用此时间单元执行计时的 Object.wait。
 long  toMicros(long duration)
          等效于 MICROSECONDS.convert(duration, this)。
 long  toMillis(long duration)
          等效于 MILLISECONDS.convert(duration, this)。
 long  toNanos(long duration)
          等效于 NANOSECONDS.convert(duration, this)。
 long  toSeconds(long duration)
          等效于 SECONDS.convert(duration, this)。
static TimeUnit  valueOf(String name)
          返回带有指定名称的该类型的枚举常量。
static TimeUnit[]  values()
          按照声明该枚举类型的常量的顺序,返回包含这些常量的数组。
注意1:它的常量MICROSECONDS,MILLISECONDS,NANOSECONDS,SECONDS都是TimeUnit类型
注意2:convert(long duration, TimeUnit unit)的意思将duration这个时间转化为本对象(this)所表示的时间形式。
本对象可能MICROSECONDS,MILLISECONDS,NANOSECONDS,SECONDS的一种。
至于duration是哪种形式的时间(MICROSECONDS,MILLISECONDS,NANOSECONDS,SECONDS的一种),
则是通过参数TimeUnit unit来确定的
注意3:TimeUnit是enum(枚举)类型,不能通过外部来实例化。
对用户来说只有它内部定义的下常量可用:MICROSECONDS,MILLISECONDS,NANOSECONDS,SECONDS,MINUTES,HOURS,DAYS
注意4:对于常量MINUTES,HOURS,DAYS,在Java1.5和Android中并没看到,但是在Java1.6中却有。
注意5:关于枚举类型的知识可参加《枚举类型
实例1:
class Task implements Delayed
{
 String name;
 long submitTime;
 Task(String taskName,long delayTime)
 {
  name=taskName;
  /*conver the time from MILLISECONDS to NANOSECONDS
   * *
   */
  submitTime=TimeUnit.NANOSECONDS.convert(submitTime, TimeUnit.MILLISECONDS) + System.nanoTime();  
 }
 public long getDelay(TimeUnit unit) 
 {  
  System.out.println("get delay");
         return unit.convert(submitTime - System.nanoTime(), TimeUnit.NANOSECONDS);  
  }  
    public int compareTo(Delayed o) 
    {  
     System.out.println("compareTo");
         Task that = (Task) o;  
         return submitTime > that.submitTime?1:(submitTime < that.submitTime ? -1 : 0);  
    } 
 void doTask()
 {
  System.out.println("do task:"+name);
 }
}

TimeUnit的更多相关文章

  1. TimeUnit 使用

    TimeUnit是java.util.concurrent包下面的一个类,表示给定单元粒度的时间段 主要作用 时间颗粒度转换 延时 常用的颗粒度 TimeUnit.DAYS //天 TimeUnit. ...

  2. java TimeUnit synchronized demo

    import java.util.concurrent.TimeUnit; public class TestCalc { private static boolean stopRequested=f ...

  3. 日期工具类TimeUnit

    import java.util.concurrent.TimeUnit; 2 3 public class TimeUnitDemo { 4 private TimeUnit timeUnit =T ...

  4. TimeUnit(转)

    java.util.concurrent并发库是JDK1.5新增的,其作者是Doug Lea ,此人是个BOSS级别的天才人物了.有了他提供的类库,使得我们对多线程并发.锁有了很大的帮助,减少了并发难 ...

  5. Thread.sleep还是TimeUnit.SECONDS.sleep

    转http://stevex.blog.51cto.com/4300375/1285767/ 刚看到TimeUnit.SECONDS.sleep()方法时觉得挺奇怪的,这里怎么也提供sleep方法? ...

  6. TimeUnit枚举类

    TimeUnit是  java.util.concurrent 中的一个枚举类.一般让线程进行睡眠时使用: TimeUnit.MILLISECONDS.sleep(100); 比如上面一行代码表示让当 ...

  7. 枚举类TimeUnit

    枚举类TimeUnit 全路径为 java.util.concurrent.TimeUnit TimeUnit 主要用于通知基于时间的方法如何解释给定的计时参数 举例如下 如果 lock 不可用,则以 ...

  8. 优先使用TimeUnit类中的sleep()

    TimeUnit是什么? TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段 ...

  9. java并发之TimeUnit理解

    TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段时间里Thread的sle ...

随机推荐

  1. python下module、package导入

    #encoding=utf-8"""模块:1.import demo #导入demo.py下的所有的函数,调用方法为:demo.function()2.from demo ...

  2. Stack集合、queue集合、hashtable集合

    1.栈:Stack,先进后出,一个一个赋值,一个一个取值,按顺序. .count           取集合内元素的个数 .push()         将元素一个一个推入集合中//stack集合存入 ...

  3. 【转】Nginx+Tomcat搭建高性能负载均衡集群

    最近对负载均衡比较感兴趣,研究了公司的负载均衡的配置,用的是阿里的SLB,相当于不用运维,只需要在后台进行简单的配置就能完成Tomcat的负载均衡,索性在网上找了几篇文章去尝试搭建一个集群,然而很多都 ...

  4. mysql存储过程详解[转]

    1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 ...

  5. VIM用法

    突然感觉vim像是linux上默认的文本编辑器,所以熟悉下用法吧. 1,set nu  显示行号. 2, /word  搜索文本word,n查找下一个.   :set hlsearch--高亮显示搜索 ...

  6. 简单的java缓存实现

    扫扫关注"茶爸爸"微信公众号 坚持最初的执着,从不曾有半点懈怠,为优秀而努力,为证明自己而活. 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法 ...

  7. vs使代码可以折叠的方法

    set [工具]->[选项]->[文本编辑器]->[C/C++]->[查看]->[大纲显示]->[大纲语句块] = True

  8. 暂时和永久改动oracle sysdate的默认输出格式

    1.当前会话有效 alter session set NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS'; 2.永久生效 sys用户登入后运行例如以下命令 然后重新启动数据 ...

  9. CentOS下mysql最大连接数设置 1040 too many connection

    当最大连接数比較小时,可能会出现"1040 too many connection"错误. 能够通过改动配置文件来改动最大连接数,但我连配置文件在哪都不知道,应该怎么办呢? 首先须 ...

  10. 【Eclipse】修改java代码不强制重启

    找到tomcat的server.xml文件,修改以下代码,重新发布重启.然后修改java代码就可以不用重启了. 将reloadable=“true”改成reloadable="false&q ...