dangsn
2024-12-26 4e9ff2ce6a830bb2340d7c8612c72eea0c5a553e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package com.vci.client.utils;
 
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
 
public class TimeMonitor {
    private Map<String, String> keyMap = new LinkedHashMap<String, String>();
    private Map<String, Long> beginTimeMap = new LinkedHashMap<String, Long>();
    private Map<String, Long> endTimeMap = new LinkedHashMap<String, Long>();
    private int timeUnit = 1; // 1:ms(毫秒) 2:s(秒)
    
    private int maxLen = 1;
    
    public long getCurrentTimeMillis(){
        return System.currentTimeMillis();
    }
    
    public void begin(String key){
         begin(key, getCurrentTimeMillis());
    }
    
    public void begin(String key, long timeMillis){
        putToMap(keyMap, beginTimeMap, key, timeMillis);
    }
    
    public void end(String key, boolean appendToEnd){
        long begin = beginTimeMap.get(key);
        removeFromMap(key);
        long end = getCurrentTimeMillis();
        begin(key, begin);
        end(key, end);
    }
    private void removeFromMap(String key){
        removeFromMap(key, keyMap);
        removeFromMap(key, beginTimeMap);
        removeFromMap(key, endTimeMap);
    }
    private void removeFromMap(String key, @SuppressWarnings("rawtypes") Map map){
        map.remove(key);
    }
    
    public void end(String key){
        end(key, getCurrentTimeMillis());
    }
    
    public void end(String key, long timeMillis){
        putToMap(keyMap, endTimeMap, key, timeMillis);
    }
    
    private void putToMap(Map<String, String> keyMap, Map<String, Long> timeMap, 
            String key, long timeMillis){
        int len = key.length();
        if(len > maxLen){
            maxLen = len;
        }
        keyMap.put(key, key);
        timeMap.put(key, timeMillis);
    }
    
    public void beginEnd(String key, long begin, long end){
        begin(key, begin);
        end(key, end);
    }
    
    public Long getUseTime(String key){
        Long begin = beginTimeMap.get(key);
        Long end = endTimeMap.get(key);
        if(begin == null || end == null) return Long.MAX_VALUE;
        
        Long span = ((end - begin));
        return span;
    }
    
    public String getAllUseTimeInfo(){
        String format = getOutFormat();
        StringBuffer sb = new StringBuffer();
        Iterator<String> its = keyMap.keySet().iterator();
        while(its.hasNext()){
            String key = its.next();
            Long span = getUseTime(key);
            sb.append(String.format(format, key, String.valueOf(span))).append("\n");
        }
        return sb.toString();
    }
    
    public String getOutFormat(){
        return "%" + String.valueOf(getMaxLen()) + "s: %s(ms)";
    }
    public int getTimeUnit() {
        return timeUnit;
    }
 
    public void setTimeUnit(int timeUnit) {
        this.timeUnit = timeUnit;
    }
 
    public int getMaxLen() {
        return maxLen;
    }
 
    public void setMaxLen(int maxLen) {
        this.maxLen = maxLen;
    }
 
    @Override
    public String toString(){
        return getAllUseTimeInfo();
    }
}