Java線程控制權的問題十分重要我們在不斷的學習中需要不斷的注意相關的問題下面我們就來看看在源代碼中Java <>線程控制權式如何體現的當wait的時候其實就是已經放出了線程的控制權所以one可以運行one運行時調用notify後又喚醒了two線程所以打印順序才是
wait
sleep
wake up
我覺得我解釋的已經很清楚了wait被調用的時候放棄鎖而控制線程是否能使用內容的關鍵就在於鎖wait並不是thread的內容而來自於object你可以這樣來理解wait我wait下就把接力棒交出去了我當前的這個線程就暫停運行記住是當前的線程然後當我交出的接力棒已經又回到我手中的時候也就是說其他的線程已經完成了任務這個時候我拿到接力棒繼續奔跑
有時候你應該把問題簡單化建議你看看thinking in java第四版我明白你是想觀察阻塞的出現你可以將onestart放到twostart的上邊就會明白什麼意思了
package test;
import javautilLinkedList;
public class Test__A {
public static void main(String[] args) {
SubTreadOne one = new SubTreadOne();
SubTreadTwo two = new SubTreadTwo(one);
twostart();
try {
Threadsleep();
} catch (InterruptedException e) {
eprintStackTrace();
}
onestart();
}
}
class SubTreadOne extends Thread {
public SubTreadOne() {
}
public void run() {
try {
Systemoutprintln(sleep);
Threadsleep();
synchronized (this) {
thisnotifyAll();
}
}catch (InterruptedException e) {
eprintStackTrace();
}
}
}
class SubTreadTwo extends Thread {
SubTreadOne one;
public SubTreadTwo(SubTreadOne one) {
thisone = one;
}
public SubTreadTwo() {
}
public void run() {
try {
synchronized (one) {
Systemoutprintln(wait);
onewait();
Systemoutprintln(wake up);
}
} catch (InterruptedException e) {
eprintStackTrace();
}
}
}
以上就是對Java線程控制權有關代碼的詳細介紹
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25676.html