了解线程运行情况的最佳实践

问题描述 投票:0回答:1

我有一个使用 SpringBoot 1.5.8 和 Java 8 实现的 SOAP 服务环境,它可以做一些事情,其中一些是通过 ExecutorService 为每个请求并行化的。我们需要的信息是特定类(即 MyCallable)的活动线程数。现在所有的东西都嵌入到 Callable 中,所以我一直在努力的是类似的东西,但是,我不知道是什么,但我的实现中有一些不好的地方告诉我“你做错了”

public class MyCallable implements Callable<?>{

    public static final AtomicInteger THREAD_COUNT = new AtomicInteger();
    
    @Override
    public byte[] call() throws RichException {
        THREAD_COUNT.incrementAndGet();
        try{
           ...
        }catch(...){
           ...
        }finally{
            MyCallable.THREAD_COUNT.decrementAndGet();
        } 
    }
}

@Component
public class ScheduledTasks {
    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        log.info("Thread count: {}", MyCallable.THREAD_COUNT.get());
    }
}

有人可以帮助解决这个问题吗?

java spring-boot executorservice
1个回答
0
投票

如果您的系统中存在监控基础设施,例如 Prometheus,您一定要看看 Micrometer 并为此目的使用 Counter meter。

千分尺随附 弹簧执行器

但是,关于主题:使

AtomicInteger
private
,所以只有你的实现才能改变价值。

添加

public static int get()
方法,该方法将委托给
THREAD_COUNT.get()

© www.soinside.com 2019 - 2024. All rights reserved.