Development Class Java

/**
  * This file is part of VoteBox.
  * 
  * VoteBox is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 3 as published by
  * the Free Software Foundation.
  * 
  * You should have received a copy of the GNU General Public License
  * along with VoteBox, found in the root of any distribution or
  * repository containing all or part of VoteBox.
  * 
  * THIS SOFTWARE IS PROVIDED BY WILLIAM MARSH RICE UNIVERSITY, HOUSTON,
  * TX AND IS PROVIDED 'AS IS' AND WITHOUT ANY EXPRESS, IMPLIED OR
  * STATUTORY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF
  * ACCURACY, COMPLETENESS, AND NONINFRINGEMENT.  THE SOFTWARE USER SHALL
  * INDEMNIFY, DEFEND AND HOLD HARMLESS RICE UNIVERSITY AND ITS FACULTY,
  * STAFF AND STUDENTS FROM ANY AND ALL CLAIMS, ACTIONS, DAMAGES, LOSSES,
  * LIABILITIES, COSTS AND EXPENSES, INCLUDING ATTORNEYS' FEES AND COURT
  * COSTS, DIRECTLY OR INDIRECTLY ARISING OUR OF OR IN CONNECTION WITH
  * ACCESS OR USE OF THE SOFTWARE.
 */
//package verifier.util;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;
public class ThreadTimer {
  // helpful
  //
  public static final long NS_PER_MS = 1000000;
  public static long getThreadTime(long tid) {
    ThreadMXBean tb = ManagementFactory.getThreadMXBean();
    return tb.getThreadCpuTime(tid);
  }
  public static long getThreadTimeMilli(long tid) {
    return getThreadTime(tid) / NS_PER_MS;
  }
  public static long getCurrentThreadTime() {
    ThreadMXBean tb = ManagementFactory.getThreadMXBean();
    return tb.getCurrentThreadCpuTime();
  }
  public static long getCurrentThreadTimeMilli() {
    return getCurrentThreadTime() / NS_PER_MS;
  }
  
  // members
  //
  long _tid; /// thread ID
  long _start_ns; 
  long _stop_ns;
  // ctors
  //
  public ThreadTimer(long tid) {
    _tid = tid;
    _start_ns = _stop_ns = 0;
  }
  public static ThreadTimer timerForThread(Thread t) {
    return new ThreadTimer(t.getId());
  }
  public static ThreadTimer timerForCurrentThread() {
    return new ThreadTimer(Thread.currentThread().getId());
  }
  // methods
  //
  public long getTimeMilli() {
    return getThreadTimeMilli(_tid);
  }
  public long getTime() {
    return getThreadTime(_tid);
  }
  public void start() {
    _stop_ns = 0;
    _start_ns = getTime();
  }
  public long look() {
    if (_stop_ns > 0L)
      return _stop_ns - _start_ns;
    if (_start_ns > 0L)
      return getTime() - _start_ns;
    return 0L;
  }
  public long lookMilli() { return look() / NS_PER_MS; }
  public long stop() {
    if (_start_ns > 0)
      _stop_ns = getTime();
    return _stop_ns - _start_ns;
  }
  public void resume() {
    _stop_ns = 0;
  }
}