0

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

1 回答 1

1

您需要更改过滤掉所有属于java.*包的代码的“CPU 设置”。检查“采样器”选项卡上的“设置”并在新预设中编辑“CPU 设置”。预设在 CPU 设置选项卡的底部进行管理。

于 2012-07-19T15:38:13.670 回答