我有一个使用 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());
}
}
有人可以帮助解决这个问题吗?
如果您的系统中存在监控基础设施,例如 Prometheus,您一定要看看 Micrometer 并为此目的使用 Counter meter。
千分尺随附 弹簧执行器
但是,关于主题:使
AtomicInteger
private
,所以只有你的实现才能改变价值。
添加
public static int get()
方法,该方法将委托给THREAD_COUNT.get()