在我的spring应用程序中,我在myService中使用了Async
方法,如下所示:
@Async("threadPoolTaskExecutor")
public void exportObject(String id) {
System.out.println("exporting " + id);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("exported " + id);
}
以下是我创建TaskExecutor
bean
@Bean(name = "threadPoolTaskExecutor")
public TaskExecutor getTaskExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(5);
threadPoolTaskExecutor.setMaxPoolSize(5);
return threadPoolTaskExecutor;
}
在我的Controller
内,我正在调用Async
方法,如下所示:
for(int i = 0; i < 100; i++){
myService.exportObject(i+"");
}
现在,我想获取已添加到队列的待处理异步任务的总数。我怎么能得到这个?我在我的控制器类中尝试了以下操作,但TaskExecutor没有用于此目的的方法。
@Autowire
private TaskExecutor taskExecutor;
public int getPendingTaskCount(){
// taskExecutor.getPendingTaskCount(); // ?
}
答案 0 :(得分:2)
你可以做:
long result = threadPoolTaskExecutor.getThreadPoolExecutor().getTaskCount() -
threadPoolTaskExecutor.getThreadPoolExecutor().getCompletedTaskCount();
但这将是一个近似值,并且每个方法实际上都使用ReentrantLock进行锁定。