gpt4 book ai didi

java - 如何获取当前正在运行的线程

转载 作者:行者123 更新时间:2023-12-02 07:13:52 27 4
gpt4 key购买 nike

我正在使用 ThreadPoolExecutor 来启动处理来自阻塞队列的请求的线程。如果队列为空,所有这些工作线程都在等待。这使得该池中的每个线程都处于等待状态。

public ThreadPoolExecutor executor = new ThreadPoolExecutor(
EngineConfiguration.numberOfSearchTask,
EngineConfiguration.numberOfSearchTask + 10, 1000,
TimeUnit.SECONDS, worksQueue, executionHandler);

我还启动了下面的计划执行程序,它尝试获取上面池中的当前 Activity 线程,当它为 0 时,它会关闭池:

final ScheduledFuture<?> scheduleFuture = scheduler
.scheduleAtFixedRate(new Runnable() {

@Override
public void run() {
int activeThreadCount = executor.getActiveThreads();
if (activeThreadCount == 0) {

SearchTaskRunner.keepRunning.set(false);
log.warn("shutdown task runner");

executor.shutdown();

log.warn("shutdown scheduler");
scheduler.shutdownNow();




}
}
}, 10, 10000, TimeUnit.SECONDS);

问题是 10 秒后,调度程序线程获得 activeThreadCount=0,因此关闭池。

我们知道:

getActiveCount():Returns the approximate number of threads that are actively executing tasks.

这可能无法给出处于 Activity 状态的线程的准确数量。

我是否可以知道第一个池中的所有线程是否都处于等待状态?

最佳答案

用这个

Set<Thread> threadSet = Thread.getAllStackTraces().keySet();

关于java - 如何获取当前正在运行的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15196535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com