8

トピックが言うように、BLOCKED や WAITING などの状態で費やされた時間も含まれますか、それとも単に RUNNABLE ですか? ドキュメントには「CPU時間」とだけ書かれていますが、これは少しあいまいです...

4

3 に答える 3

3

ThreadMXBean.getThreadCpuTime()には、RUNNABLE状態で費やされた時間のみが含まれますが、これの計算方法はプラットフォームによって異なることに注意してください。

getThreadCpuTime()が、スレッドが実際に何かを実行している時間のみをカバーすることを示すプログラムを次に示します。

import java.lang.management.*;

public class Test implements Runnable {
    public static void main(String[] args)
        throws Exception {

        long time = System.nanoTime();
        Test test = new Test();
        synchronized (test) {
            new Thread(test).start();
            while (test.cpu == -1) {
                test.wait();
                }
            }
        System.out.println("time: " + (System.nanoTime() - time));
        System.out.println("cpu: " + test.cpu);
        }

    private long cpu = -1;

    public synchronized void run() {
        try {
            ThreadMXBean thread = ManagementFactory.getThreadMXBean();
            long cpu = thread.getCurrentThreadCpuTime();
            Thread.sleep(300);
            long time = System.nanoTime();
            while (System.nanoTime() - time < 700000000);
            this.cpu = thread.getCurrentThreadCpuTime() - cpu;
            }
        catch (InterruptedException _) {}
        finally {
            notify();
            }
        }
    }
于 2012-06-10T18:56:15.600 に答える
1

はい、これは唯一のものです。次のメソッドを使用して、ThreadInfoRUNNABLEを介して他の状態で費やされた時間の詳細な統計を受け取ることができます。

TIMED_WAITINGと の間にWAITINGは、それ以上の区別はありませんgetWaitedTime()

于 2012-07-08T17:00:27.343 に答える
0

実行可能のみ。それだけです、そうでなければ役に立たないでしょう。

于 2012-06-10T18:39:03.760 に答える