ThreadMXBean.getThreadCpuTime возвращает 0 - PullRequest
0 голосов
/ 13 сентября 2018

Из-за нехватки времени мне пришлось немного пройтись по многопоточности Java, поэтому извините, если этот вопрос кажется неосведомленным.Основная идея заключается в том, что я пытаюсь получить процессорное время для функции поиска DoubleHash, но по какой-то причине я получаю процессорное время равным нулю, хотя поток, кажется, работает и завершается нормально.Любая помощь приветствуется.

DoubleHashThread.java

import doubleHash.DoubleHash;
public class DoubleHashThread extends Thread
{
    public String[] hashTable= new String[DoubleHash.TABLE_SIZE];
    public String studentId;

    public DoubleHashThread(String s) 
    {
        this.setName(s);
    }

    //OVERRIDE RUN TO RUN SEARCH FUNCTION
    @Override
    public void run()
    {
    int a = 0;

    for(int i = 0; i < 1; i++)
    {
        a++;
        DoubleHash.searchTable(hashTable, studentId);
        DoubleHash.getCpuTime(this);
        System.out.println("inside thread, is alive: " + this.isAlive());
    }
    return;
}

Фрагмент Main

//CREATE A THREAD AND ADD TO LIST
threadList.add(new DoubleHashThread("Double Hash Thread"));
threadList.get(0).setDaemon(true);

//UPDATE THREAD HASH TABLE
threadList.get(0).hashTable = hashTable;

//GET USER INPUT
sc.nextLine(); //clear buffer
System.out.println("Please Enter the Student ID ");
data=sc.nextLine();

//UPDATE WANTED STUDENT ID
threadList.get(0).studentId = data; 

//START THREAD EXECUTION
threadList.get(0).start(); 

//TERMINATE THREAD AND REMOVE FROM LIST
try 
{
    threadList.get(0).join();
    threadList.remove(0);

} catch (InterruptedException e) {
    e.printStackTrace();
}

getCpuTime

public static long getCpuTime(DoubleHashThread dt)
{
    ThreadMXBean bean = ManagementFactory.getThreadMXBean(); //GET THREAD BEAN
    long cpuTime = -1000;

    if (bean.isThreadCpuTimeSupported())
    {
        System.out.println("in get cpu method, status: " + dt.getState());
        System.out.println("CPU time for ID: " + dt.getId() + 
                " THREAD NAME: " + dt.getName() + " is " + bean.getThreadCpuTime(dt.getId()));

        cpuTime =  bean.getThreadCpuTime(dt.getId());
    }

    return cpuTime;

}

Обновление 1 Как ни странно, время процессора первого потока, которое он возвращает мне, не равно 0, но последующие всегда равны 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...