2012-06-08 34 views

Trả lời

0

Chỉ có thể chạy. Đó là nó, nếu không nó sẽ là vô ích.

+0

Không phải như vậy. Nếu nó bao gồm tất cả thời gian, thời gian runnable có thể được bắt nguồn từ tổng số - bị chặn - chờ đợi. Ngoài ra, bạn đã không cung cấp bất kỳ bằng chứng về bất cứ điều gì, bạn đã chỉ tuyên bố những gì trông giống như một đoán. –

+2

nếu nó đã bao gồm. chặn/chờ tất cả các chủ đề bắt đầu cùng một lúc sẽ có cùng giá trị. Đó là một quan sát khá đơn giản mà bạn có thể tự tạo ra. Ngoài ra, hãy kiểm tra nguồn của JVM impl ... Hoặc nếu bạn cần trạng thái chứng minh nếu trong câu hỏi. Thời gian CPU của Morealso như tên gọi của nó là thời gian đã được sử dụng trong CPU. Trạng thái BLOCKED/WAITING nằm im trong bộ lập lịch hệ điều hành không phải CPU, tôi thực sự nghĩ rằng nó là hiển nhiên. – bestsss

3

ThreadMXBean.getThreadCpuTime() chỉ bao gồm thời gian ở trạng thái RUNNABLE, nhưng lưu ý rằng cách tính toán này phụ thuộc vào nền tảng.

Dưới đây là một chương trình mà cho thấy getThreadCpuTime() chỉ bao gồm thời gian thread đang thực sự làm điều gì đó:

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

Ứng dụng này chứng minh giả thuyết của bạn như thế nào? –

+2

Nó không phải là một giả thuyết, tôi nhìn vào mã nguồn Java, đó là cách tôi phát hiện ra rằng nó "phụ thuộc vào nền tảng". Bởi vì rất khó để cho thấy nghiên cứu này, tôi đã thiết kế một thử nghiệm, mặc dù nó không chứng minh bất cứ điều gì, cho thấy sự tương quan. – petithug

1

Có, đây là chỉ RUNNABLE, bạn có thể nhận được thống kê thêm thời gian dành cho các quốc gia khác thông qua ThreadInfo với các phương pháp sau:

Không còn phân biệt đối xử giữa TIMED_WAITINGWAITING trong getWaitedTime().

Các vấn đề liên quan