使用ArrayBlockingQueue
来考虑这个生产者 - 消费者代码:我想知道
一个。 put()
/ take()
整体消耗的总时间是多少?
湾put()
和take()
来电等待的总时间是多少?被阻止?
在VisualVM中拍摄快照只显示运行深度(),但不显示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();
}
});
答案 0 :(得分:1)
您需要更改过滤掉所有java.*
个软件包代码的“CPU设置”。选中“采样器”选项卡上的“设置”,然后在新预设中编辑“CPU设置”。预设在CPU设置选项卡的底部进行管理。