Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取执行当前方法的线程数?_Java_Multithreading_Concurrency - Fatal编程技术网

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是的