考虑这个使用 a 的生产者-消费者代码ArrayBlockingQueue
:我想找出 a。put()
/总共消耗了多少总时间take()
?湾。put()
和take()
调用等待的总时间是多少?封锁?
在 VisualVM 中拍摄快照仅显示 run() 的深度,但不显示put()
/take()
调用。知道如何获得这些时间吗?
一般来说,如何从 ? 递归地获得所有方法的累积运行时间main()
?
final BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(QUEUE_SIZE);
ExecutorService exec = Executors.newFixedThreadPool(2);
exec.submit(new Runnable() {
int i =0;
@Override
public void run() {
while(i++<NUM)
try {
queue.put(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
exec.submit(new Runnable() {
int i =0;
@Override
public void run() {
while(i++<NUM)
try {
queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
consumerFinished.countDown();
}
});