如何計算每個線程調用函數的次數?如何計算每個線程調用函數的次數?
所以假設有很多流程調用了相同的功能。我必須改變它們以傳遞一些參數,這將保持呼叫的數量。但我正在尋找不修改函數簽名的方法,而是保留線程局部變量並在一段時間內打印其值。
如何計算每個線程調用函數的次數?如何計算每個線程調用函數的次數?
所以假設有很多流程調用了相同的功能。我必須改變它們以傳遞一些參數,這將保持呼叫的數量。但我正在尋找不修改函數簽名的方法,而是保留線程局部變量並在一段時間內打印其值。
我想你可以使用簡單的同步塊
//a counter declared in your class
private static int counter;
...
...
public void someMethod foo() {
synchronized(counter){
counter++;
}
//rest of your logic
...
}
}
如果你想算時間的方法被稱爲總數,你可以使用一個靜態的AtomicInteger或AtomicLong的做到這一點。
class C {
private static final AtomicInteger count = new AtomicInteger();
public void m() {
count.getAndIncrement();
//... the rest of the method
}
public static void getCount() {
return count.get();
}
}
如果你想保留一個單獨計數爲每個線程,你需要地圖專櫃
class C {
private static final ConcurrentHashMap<Long, AtomicInteger> counts = new ConcurrentHashMap<>();
void m() {
counts.putIfAbsent(Thread.currentThread().getId(), new AtomicInteger(0));
counts.get(Thread.currentThread().getId()).getAndIncrement();
//... the rest of the method
}
public static Map<Long, AtomicInteger> getCount() {
return counts;
}
}
瓦爾班·霍維漢尼斯恩
必須使用同步的函數或方法內部變量,sycrhonize有必要在執行和計數期間不要在線程之間進行爭奪,以確保正確的價值。
public class exemplesyn {
//Count variable
private Integer countsychronized =0;
//Methode to count execution
public void executedmethodeToCount(){
this.countSychronized();
//Code to execute
}
//Synchroniced methode to count
public synchronized void countSychronized(){
this.countsychronized++;
}
}