我正在阅读来自Java The complete Reference - Herbert Schildt (TATA McGRAW HILL)
. 在这个示例表单中,具有较低优先级的线程应该clicks
比具有较高优先级的线程给出较低的值。但我得到了什么
low-priority thread 3000255895
hi-priority thread 2857361716
根据书它是这样的(差异)
low-priority thread 4408112
hi-priority thread 589626904
代码
class Clicker implements Runnable {
long click = 0;
Thread t;
private volatile boolean running = true;
public Clicker (int p) {
t = new Thread(this);
t.setPriority(p);
}
public void run() {
while(running) {
click++;
}
}
public void stop() {
running = false;
}
public void start() {
t.start();
}
}
class Priority {
public static void main(String args[]) {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
Clicker hi = new Clicker(Thread.NORM_PRIORITY + 2);
Clicker lo = new Clicker(Thread.NORM_PRIORITY - 2);
hi.start();
lo.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
System.out.println("main thread interrupted");
}
lo.stop();
hi.stop();
try {
hi.t.join();
lo.t.join();
} catch (InterruptedException e) {
System.out.println("interrupted exception catched in main");
}
System.out.println("low-priority thread " + lo.click);
System.out.println("hi-priority thread " + hi.click);
}
}
我上线了Intel® Core™ i3-2310M CPU @ 2.10GHz × 4 with Ubuntu 13.04
和Thread.sleep(50000);
low-priority thread 14849893875
hi-priority thread 14224080358
区别不是很大吗
我也尝试优先级 HI = 10 和 LOw = 1,但结果几乎相同。
更新:运行 100 个线程 50 后priority = 1
,50 with priority = 10
结果为
这里time = clicks values
high = 82 time = 110117529
low = 83 time = 102549208
high = 84 time = 110905795
low = 85 time = 99100530
high = 86 time = 105012756
low = 87 time = 110195297
high = 88 time = 102820088
low = 89 time = 97814606
high = 90 time = 99990839
low = 91 time = 102326356
high = 92 time = 98656119
low = 93 time = 98127243
high = 94 time = 97097823
low = 95 time = 103604394
high = 96 time = 93632744
low = 97 time = 99032550
high = 98 time = 103879116
low = 99 time = 97179029
拥有 1000 个线程Take 4-5 min. to complete, all 4 cores at 100%
low = 977 time = 23593983
high = 978 time = 23998970
low = 979 time = 23879458
high = 980 time = 22775297
low = 981 time = 21297504
high = 982 time = 22464600
low = 983 time = 20301501
high = 984 time = 19073992
low = 985 time = 19450707
high = 986 time = 19317769
low = 987 time = 18454648
high = 988 time = 17901939
low = 989 time = 16976661
high = 990 time = 17360728
low = 991 time = 16813824
high = 992 time = 15531501
low = 993 time = 14659965
high = 994 time = 12833364
low = 995 time = 13708670
high = 996 time = 13348568
low = 997 time = 12947993
high = 998 time = 12749436
low = 999 time = 9804643
每个线程的不可预测的输出。