考虑这个使用 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();
}
});