如何计算每个线程调用函数的次数?
假设有很多流,它们调用相同的函数。我必须更改它们才能传递一些参数,这将保持调用次数。但我正在寻找不修改函数签名的方法,而是保留线程局部变量并在一段时间内打印它的值。
答案 0 :(得分:1)
我猜你可以使用简单的同步块
来做到这一点//a counter declared in your class
private static int counter;
...
...
public void someMethod foo() {
synchronized(counter){
counter++;
}
//rest of your logic
...
}
}
答案 1 :(得分:0)
如果要计算方法被调用的总次数,可以使用静态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;
}
}
答案 2 :(得分:-1)
Vardan Hovhannisyan
你必须在函数或方法中使用synchronized变量,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++;
}
}