Цель: нужно было подсчитать, сколько раз было доступно обращение к потокам с высоким приоритетом и низким приоритетом. // Когда я компилирую следующий код, «h» (int h, стоящий для максимума) остается равным нулю, но «l» (низкий) увеличивается.Подсчет приоритета нити - Java
class Priority implements Runnable {
int high = 0;
int low = 0;
int count; Thread thrd;
static boolean stop = false;
static String currentName;
Priority(String name) {
thrd = new Thread(this, name);
count = 0;
currentName = name;
}
public void run() {
System.out.println(thrd.getName() + " starting.");
do {
count++;
if(currentName.compareTo(thrd.getName()) != 0) {
currentName = thrd.getName();
System.out.println("In " + currentName);
System.out.println("Name in thrd is " + thrd.getName());
System.out.println("name in currentName is " + currentName);
if ("High Priority" == currentName) h++;
if ("Low Priority" == currentName) l++;
}
} while(stop == false && count<10);
stop = true;
System.out.println("\n" + thrd.getName() + " terminating.");
}
}
class PriorityDemo {
public static void main(String args[]) {
Priority mt1 = new Priority("High Priority");
Priority mt2 = new Priority("Low Priority");
mt1.thrd.setPriority(Thread.NORM_PRIORITY+2);
mt2.thrd.setPriority(Thread.NORM_PRIORITY-2);
mt1.thrd.start();
mt2.thrd.start();
try {
mt1.thrd.join();
mt2.thrd.join();
} catch(InterruptedException e) {
System.out.println("Main thread interrupted.");
}
System.out.println("\n High priority thread counted to " + mt1.count);
System.out.println("'n Low priority thread counted to " + mt2.count);
System.out.println("In 'mt1' \nhigh is " + mt1.h + " and low is " + mt1.l);
System.out.println("In 'mt2' \nhigh is " + mt2.h + " and low is " + mt2.l);
}
}
Последние две строки исполняемого кода заключаются в следующем: высоко в MT1 является на низком уровне является (например, дл) 985 высоко в MT2 является на низком уровне является 985!
Я также пробовал // if ("High Priority" == thrd.getName()) h ++; if ("Low Priority" == thrd.getName()) l ++; Но это тоже не получилось.
использование „Высокий приоритет“ .equals (thrd.getName()) – tgkprog
Или лучше enum или final String/int, чтобы обозначить «High Priority» ... – tgkprog
это тоже багги. if (currentName.compareTo (thrd.getName())! = 0) { currentName = thrd.getName(); Другое дело, что потоковые программы - забавные, но бесполезные для большинства разработчиков приложений. сосредоточиться на j2ee и коллекциях ...если вы не учитесь в школе, и это академический – tgkprog