您好,登錄后才能下訂單哦!
怎樣進行Java線程控制權源代碼的深入探討,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Java線程控制權的問題十分重要,我們在不斷的學習中需要不斷的注意相關的問題。下面我們就來看看在源代碼中Java線程控制權式如何體現的。當wait的時候其實就是已經放出了線程的控制權,所以one可以運行。one運行時調用notify后又喚醒了two線程所以打印順序才是:
wait
sleep
wake up
我覺得我解釋的已經很清楚了。wait被調用的時候放棄鎖,而控制線程是否能使用內容的關鍵就在于鎖,wait并不是thread的內容,而來自于object。你可以這樣來理解wait,我wait下就把接力棒交出去了,我當前的這個線程就暫停運行,記住是當前的線程。然后當我交出的接力棒已經又回到我手中的時候,也就是說其他的線程已經完成了任務。這個時候我拿到接力棒繼續奔跑。
有時候你應該把問題簡單化,建議你看看thinking in java第四版,我明白你是想觀察阻塞的出現,你可以將one。start放到two。start的上邊就會明白什么意思了
package test; import java.util.LinkedList; public class Test_2_A2 { public static void main(String[] args) { SubTreadOne one = new SubTreadOne(); SubTreadTwo two = new SubTreadTwo(one); two.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } one.start(); } } class SubTreadOne extends Thread { public SubTreadOne() { } public void run() { try { System.out.println("sleep"); Thread.sleep(3000); synchronized (this) { this.notifyAll(); } }catch (InterruptedException e) { e.printStackTrace(); } } } class SubTreadTwo extends Thread { SubTreadOne one; public SubTreadTwo(SubTreadOne one) { this.one = one; } public SubTreadTwo() { } public void run() { try { synchronized (one) { System.out.println("wait"); one.wait(); System.out.println("wake up"); } } catch (InterruptedException e) { e.printStackTrace(); } } }
以上就是對Java線程控制權有關代碼的詳細介紹。
看完上述內容,你們掌握怎樣進行Java線程控制權源代碼的深入探討的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。