2012-06-08 1 views

답변

0

실행 만 가능합니다. 그게 전부입니다. 그렇지 않으면 쓸모가 없습니다.

+0

그렇지 않습니다. 모든 시간을 포함하면 실행 가능한 시간은 전체 차단 대기에서 파생 될 수 있습니다. 또한, 당신은 어떤 증거도 제공하지 않았고, 당신은 방금 추측처럼 보였다고 말했습니다. –

+2

동시에 시작된 모든 스레드 차단/대기는 동일한 값을가집니다. 그것은 당신이 스스로 고안 할 수있는 아주 간단한 관찰입니다. 또는 JVM impl의 소스를 확인하십시오. 또는 질문에 증거가 필요한 경우 필요합니다. Morealso CPU 시간은 그 이름에서 알 수 있듯이 CPU 내에서 소비 된 시간입니다. BLOCKED/WAITING 상태는 OS 스케줄러에서 CPU가 아닌 휴면 상태에 놓여 있습니다. 정말 분명하다고 생각했습니다. – bestsss

3

ThreadMXBean.getThreadCpuTime()은 RUNNABLE 상태에서 소요 된 시간 만 포함하지만이 계산 방법은 플랫폼에 따라 다릅니다. 당신은을 통해 다른 주에서 보낸 시간의 추가 통계를받을 수 있습니다

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(); 
      } 
     } 
    } 
+0

이 앱은 어떻게 당신의 가설을 증명합니까? –

+2

이것은 가설이 아니므로 Java 소스 코드를 살펴 보았습니다. Java 소스 코드는 "플랫폼에 달려있다"는 것을 알았습니다. 이 연구를 보여주기가 어렵 기 때문에 아무 것도 증명하지는 못했지만 상관 관계를 보여주는 테스트를 설계했습니다. – petithug

1

예,이 단지 RUNNABLE입니다 : 여기

는 GetThreadCpuTime에()는 스레드가 실제로 일을하고 만 시간을 다루고 있음을 보여주는 프로그램입니다 다음과 같은 방법으로 ThreadInfo :

TIMED_WAITINGWAITING 사이의 차이는 getWaitedTime()입니다.

관련 문제