All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xiongyingqi.util.TimerHelper Maven / Gradle / Ivy

/**
 * YIXUN_2.0
 */
package com.xiongyingqi.util;

import java.util.HashMap;
import java.util.Map;

/**
 * 计时器
 *
 * @author 瑛琪
 * @version 2013-7-26 下午6:05:52
 */
public class TimerHelper {
    static class TimerHolder extends EntityHelper {
        /**
         * 调用计时器的对象
         */
        Object object;
        /**
         * 调用计时器的线程
         */
        Thread thread;

        /**
         * Object
         *
         * @return the object
         */
        public Object getObject() {
            return this.object;
        }

        /**
         * Object
         *
         * @param object the object to set
         */
        public void setObject(Object object) {
            this.object = object;
        }

        /**
         * Thread
         *
         * @return the thread
         */
        public Thread getThread() {
            return this.thread;
        }

        /**
         * Thread
         *
         * @param thread the thread to set
         */
        public void setThread(Thread thread) {
            this.thread = thread;
        }

    }

    private static Map holderObjects = new HashMap();
    private static Map idTimeMap = new HashMap();

    /**
     * 获取与上个计时点以毫秒为单位的时差 ,如果是第一个计时点,则开始即时并返回0
* 此方法是以线程和调用类来区别计时的,即:不同的类或不同的线程都会导致计时器的从0开始计时
* 2013-7-26 下午6:21:40 * * @return long */ public static long getTime() { // StackTraceHelper.printStackTrace(); StackTraceElement[] stackTraceElements = StackTraceHelper.getStackTrace(); StackTraceElement stackTraceElement = stackTraceElements[2]; // 调用本类的对象类型堆栈 String clazz = stackTraceElement.getClassName(); // 调用本类的对象类型 Thread thread = Thread.currentThread(); TimerHolder holder = new TimerHolder(); holder.setObject(clazz); holder.setThread(thread); // String methodName = stackTraceElement.getMethodName(); // int lineNumber = stackTraceElement.getLineNumber(); // long hashCode = 17; // hashCode = 37 * hashCode + clazz.hashCode(); // hashCode = 37 * hashCode + methodName.hashCode(); // hashCode = 37 * hashCode + lineNumber; // System.out.println("stackTraceElement.getClassName() ========= " + // stackTraceElement.getClassName()); Long startTime = holderObjects.get(holder); // System.out.println(stackTraceElement); if (startTime == null) { startTime = System.currentTimeMillis(); } long time = System.currentTimeMillis() - startTime; startTime = System.currentTimeMillis(); holderObjects.put(holder, startTime); return time; } public static long getTime(int id) { // StackTraceHelper.printStackTrace(); StackTraceElement[] stackTraceElements = StackTraceHelper.getStackTrace(); StackTraceElement stackTraceElement = stackTraceElements[2]; // 调用本类的对象类型堆栈 String clazz = stackTraceElement.getClassName(); // 调用本类的对象类型 // String methodName = stackTraceElement.getMethodName(); // int lineNumber = stackTraceElement.getLineNumber(); // long hashCode = 17; // hashCode = 37 * hashCode + clazz.hashCode(); // hashCode = 37 * hashCode + methodName.hashCode(); // hashCode = 37 * hashCode + lineNumber; // System.out.println("stackTraceElement.getClassName() ========= " + // stackTraceElement.getClassName()); Long startTime = idTimeMap.get(id); // System.out.println(stackTraceElement); if (startTime == null) { startTime = System.currentTimeMillis(); } long time = System.currentTimeMillis() - startTime; startTime = System.currentTimeMillis(); idTimeMap.put(id, startTime); return time; } public static void main(String[] args) { System.out.println(getTime()); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(getTime()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(getTime()); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy