Java TimeUnitの使い方

Java5からナノ秒のsleepとかもサポートされている。Thread.sleep()でもできるが、TimeUnitというenumクラスもあるので、そちらを使ってみる。

次の例は1秒の休止を指定精度を変更してTimeUnitで実装している。休止時間の計測にはSystem.currentTimeMillis()とSystem.nanoTime()を使っている。

package org.sssg.soft.sample.timer;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class SimpleSleep {
  public void getTimeMillis(Runnable r) {
    long start = System.currentTimeMillis();
    r.run();
    long end = System.currentTimeMillis();
    System.out.println("TimeMillis Sleep " + (end - start) + " ms");
  }
  public void getNanoTime(Runnable r) {
    long start = System.nanoTime();
    r.run();
    long end = System.nanoTime();
    System.out.println("NanoTime Sleep " + (end - start) + " ns");
  }

  public static void main(String[] args) {
    List<Runnable> list = new ArrayList<Runnable>();
    list.add(new Runnable() {
      @Override
      public void run() {
        System.out.println("TimeUnit.SECONDS -------------------- ");
        try {
          TimeUnit.SECONDS.sleep(1L);
        } catch (InterruptedException ex) {
        }
      }
    });
    list.add(new Runnable() {
      @Override
      public void run() {
        try {
          System.out.println("TimeUnit.MILLISECONDS ----------- ");
          TimeUnit.MILLISECONDS.sleep(1000L);
        } catch (InterruptedException ex) {
        }
      }
    });
    list.add(new Runnable() {
      @Override
      public void run() {
        try {
          System.out.println("TimeUnit.MICROSECONDS ----------- ");
          TimeUnit.MICROSECONDS.sleep(1000000L);
        } catch (InterruptedException ex) {
        }
      }
    });
    list.add(new Runnable() {
      @Override
      public void run() {
        try {
          System.out.println("TimeUnit.NANOSECONDS ------------ ");
          TimeUnit.NANOSECONDS.sleep(1000000000L);
        } catch (InterruptedException ex) {
        }
      }
    });
    SimpleSleep app = new SimpleSleep();
    for (Runnable r : list) {
      app.getTimeMillis(r);
      app.getNanoTime(r);
    }
  }
}

ちなみに、Object.wait()でミリ秒やナノ秒を指定するときには、TimeUnit.timedWait()を使うと便利である。

同じタグの記事: Java
同じカテゴリの記事: Java
関連書籍: Java