如何计算每个线程调用函数的次数?如何计算每个线程调用函数的次数?
所以假设有很多流程调用了相同的功能。我必须改变它们以传递一些参数,这将保持呼叫的数量。但我正在寻找不修改函数签名的方法,而是保留线程局部变量并在一段时间内打印其值。
如何计算每个线程调用函数的次数?如何计算每个线程调用函数的次数?
所以假设有很多流程调用了相同的功能。我必须改变它们以传递一些参数,这将保持呼叫的数量。但我正在寻找不修改函数签名的方法,而是保留线程局部变量并在一段时间内打印其值。
我想你可以使用简单的同步块
//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++;
}
}