【发布时间】:2016-03-28 15:17:53
【问题描述】:
我正在使用 LinkedBlockingQueue,由多个工作线程和 1 个状态报告线程共享。
状态报告线程每 30 秒报告一次队列中剩余的项目数:
while(!queue.isEmpty()){
try {
float completion = (queue.size() * 1.0f) / this.queueSize;
System.out.println(this.jobeName+" : "+this.conferenceYear+ " remaining..."+MessageFormat.format("{0,number,#.##%}",completion));
TimeUnit.SECONDS.sleep(30);;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
有没有办法让状态线程仅在工作线程从队列中拉出时报告?
【问题讨论】:
-
您的意思是,当工作线程从队列中拉出时,您希望状态线程报告而不是等待 30 秒?
-
您可以检查此号码何时更改,仅在更改时打印。
-
@PeterLawrey 可能会出现一个线程被拉另一个线程被推动的情况——大小将保持不变。
-
@SashaSalauyou 这是可能的,但除非长度为零,否则它应该是大多数时间。注意:队列长度不包括任何实际运行的作业。
-
@MadhusudanaReddySunnapu 完全正确!
标签: java multithreading