在下面的代碼中,我試圖通過產生較低優先級的線程來獲得更高優先級的線程來運行。但它似乎不工作,更高優先級的線程似乎在低優先級線程完成後運行。任何人都可以解釋我做錯了什麼?在Java 6中,爲什麼即使優先級較低的線程產量不高,優先級較高的線程也不會運行?
import java.util.ArrayList;
import java.util.List;
public class TestThreadPriority extends Thread {
static List<String> messages = new ArrayList<String>();
public void run() {
Thread t = Thread.currentThread();
int priority = t.getPriority();
String name = t.getName();
messages.add(name + ":" + priority);
Thread.yield();
messages.add(name + ":" + priority);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread t = Thread.currentThread();
t.setPriority(MIN_PRIORITY);
int priority = t.getPriority();
String name = t.getName();
messages.add(name + ":" + priority);
Thread tp1 = new TestThreadPriority();
tp1.setPriority(MIN_PRIORITY);
Thread tp2 = new TestThreadPriority();
tp2.setPriority(MAX_PRIORITY);
tp1.start();
tp2.start();
Thread.yield();
messages.add(name + ":" + priority);
for(int i = 0; i < messages.size(); i++) {
System.out.println((i+1) + ". " + messages.get(i));
}
}
}
輸出是:
- 主:1
- 線程0:1
- 線程0:1
- 主:1
- 線程1: 10
- Thread-1:10
任何幫助,非常感謝。
感謝, 奎德
如果你在Linux上,另請參閱這個問題:http://stackoverflow.com/questions/1662185/do-linux-jvms-actually-implement-thread-priorities – JaakkoK 2009-12-28 21:28:04