Java 如何获取执行当前方法的线程数?
我试图调试多线程代码中的性能问题,我想知道是否有办法打印出当前执行该方法的线程数。例如,假设我有以下内容:Java 如何获取执行当前方法的线程数?,java,multithreading,concurrency,Java,Multithreading,Concurrency,我试图调试多线程代码中的性能问题,我想知道是否有办法打印出当前执行该方法的线程数。例如,假设我有以下内容: public void concurrentMethod(Object data) { int numberOfThreadsExecutingThisMethodSimulataneously = //...? System.out.println(numberOfThreadsExecutingThisMethodSimulataneously); //meth
public void concurrentMethod(Object data) {
int numberOfThreadsExecutingThisMethodSimulataneously = //...?
System.out.println(numberOfThreadsExecutingThisMethodSimulataneously);
//method body...
}
具体而言,我使用的是ThreadPoolExecutor,因此作业的提交方式如下:
ExecutorService executor;
for (Object data : myData) {
executor.execute(() -> concurrentMethod(data));
}
怎么样
static AtomicInteger currentNumberOfThreads = new AtomicInteger();
public void concurrentMethod(Object data) {
currentNumberOfThreads.incrementAndGet();
try {
// currentNumberOfThreads.gets()
} finally {
currentNumberOfThreads.decrementAndGet();
}
}
那是干什么用的?也许在方法printing Thread.currentThread中只需一个简单的日志就足够了。您可以保留一个静态集,在方法的开头添加线程名称,然后在结尾删除。线程池是否有边界?提供了一些stat方法,并讨论了hook方法,因此可以使用AtomicInteger来跟踪。@AndrewS线程池是有界的corePool和maxPool大小相同。另外,我的示例是Simplification—实际上,我调用的方法是从另一个类中的另一个方法调用的,并且不知道执行器。如果使用Spring,这将是一个方面的工作。只是澄清一下:所以我应该调用类似System.out.printlncurrentNumberOfThreads.incrementAndGet;在方法的第一行中,调用currentNumberOfThreads.decrementAndGet;在最后一行?@SinaMadani是的