2015-06-17 1 views
0

Возможно ли контролировать различные этапы обработки с использованием одного и того же класса JAMon Monitor? Например, в примере кода я хотел бы измерить время выполнения «Point1» и «Point2». Однако пример возвращает только статистику о втором шаге. Конечно, я могу создать несколько объектов типа Monitor. Но, может быть, есть более чистый способ?Использование нескольких меток в Java Application Monitor (JAMon)

Monitor mon = null;  
for(int i =0; i < 1000; i++){ 
    //Part1 
    mon = MonitorFactory.start("Point 1"); 
    Thread.sleep(2); 
    mon.stop();  

    //Part2 
    mon = MonitorFactory.start("Point 2"); 
    mon.stop(); 
} 

System.out.println(mon.toString()); 

Выходные:

Хамон Этикетка = точка 2, ед = мс .: (LastValue = 0,0, Доступ = 1000,0, Среднее = 0,001, Общее = 1,0, мин = 0,0, Макс = 1,0, Активный = 0.0, Среднее Активный = 1,0, Макс Активный = 1,0, First Access = ср 17 июня 2015 10:40:44 CEST, Последний доступа = ср 17 июня 10:40:46 CEST 2015)

Желаемый результат:

JAMon Label = Point 1, Units = ms .: (LastValue = 0.0, Hits = 1000.0, Avg = 0.001, Total = 1.0, Min = 0.0, Max = 1.0, Active = 0.0, Avg Active = 1.0, Max Active = 1,0, First Access = ср 17 июня 10:40:44 CEST 2015, Последний Access = ср 17 июня 10:40:46 CEST 2015)

Хамон Ярлык = точка 2, Units = мс .: (LastValue = 0.0, Hits = 1000.0, Avg = 0.001, Total = 1.0, Min = 0.0, Max = 1.0, Active = 0.0, Avg Active = 1.0, Max Active = 1.0, First Access = Wed Jun 17 10:40 : 44 CEST 2015, последний Доступ = ср 17 июн 10:40:46 CEST 2015)

ответ

0

Вы можете изменить вызов монитора toString() на явный вызов getMonitor (...).

Monitor mon = null; 

for(int i =0; i < 1000; i++){ 
    //Part1 
    mon = MonitorFactory.start("Point 1"); 
    Thread.sleep(2); 
    mon.stop();  

    //Part2 
    mon = MonitorFactory.start("Point 2"); 
    mon.stop(); 
} 

System.out.println(MonitorFactory.getMonitor("Point 1").toString()); 
System.out.println(MonitorFactory.getMonitor("Point 2").toString()); 

Или вы можете создать 2 монитора.

Monitor mon1 = null; 
Monitor mon2 = null;  

for(int i =0; i < 1000; i++){ 
    //Part1 
    mon1 = MonitorFactory.start("Point 1"); 
    Thread.sleep(2); 
    mon1.stop();  

    //Part2 
    mon2 = MonitorFactory.start("Point 2"); 
    mon2.stop(); 
} 

System.out.println(mon1.toString()); 
System.out.println(mon2.toString()); 
0

Существует лучший способ, чем другой ответ:

for(Object monitor: MonitorFactory.getMap().values()){ 
    System.out.println(monitor); 
} 

Это будет печатать все используемые мониторы непока в настоящее время. Во всех потоках. Именно то, что вы хотите.

Вы можете проверить завершенный пример кода и вывода here.

 Смежные вопросы

  • Нет связанных вопросов^_^