Из-за нехватки времени мне пришлось немного пройтись по многопоточности 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.