Thread Timer
/**
* 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;
}
}
Related examples in the same category