新聞中心
Java線程控制權(quán)的問題十分重要,我們在不斷的學(xué)習(xí)中需要不斷的注意相關(guān)的問題。下面我們就來看看在源代碼中Java線程控制權(quán)式如何體現(xiàn)的。當(dāng)wait的時候其實就是已經(jīng)放出了線程的控制權(quán),所以one可以運行。one運行時調(diào)用notify后又喚醒了two線程所以打印順序才是:

wait
sleep
wake up
我覺得我解釋的已經(jīng)很清楚了。wait被調(diào)用的時候放棄鎖,而控制線程是否能使用內(nèi)容的關(guān)鍵就在于鎖,wait并不是thread的內(nèi)容,而來自于object。你可以這樣來理解wait,我wait下就把接力棒交出去了,我當(dāng)前的這個線程就暫停運行,記住是當(dāng)前的線程。然后當(dāng)我交出的接力棒已經(jīng)又回到我手中的時候,也就是說其他的線程已經(jīng)完成了任務(wù)。這個時候我拿到接力棒繼續(xù)奔跑。
有時候你應(yīng)該把問題簡單化,建議你看看thinking in java第四版,我明白你是想觀察阻塞的出現(xiàn),你可以將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線程控制權(quán)有關(guān)代碼的詳細介紹。
【編輯推薦】
- 使用Java多線程實現(xiàn)任務(wù)分發(fā)
- 用Java多線程實現(xiàn)無阻塞讀取遠程文件
- Java多線程中wait語句的具體使用方法
- Java多線程如何解決關(guān)鍵字封鎖問題
- Java多線程如何創(chuàng)建多個線程
網(wǎng)站標(biāo)題:Java線程控制權(quán)源代碼的深入探討
鏈接地址:http://m.fisionsoft.com.cn/article/codhpoi.html


咨詢
建站咨詢
