TimeUnit 時間單元

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);
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章