導航:首頁 > 安裝方法 > 調用wait方法後線程會去哪裡

調用wait方法後線程會去哪裡

發布時間:2022-01-07 22:04:19

Ⅰ JAVA程序中有a,b兩個線程,當a調用wait方法進入等待狀態後,b用notify方法

這個是不確定,雙線程都有可能執行到。如果短期類線程執行完畢,有很大可能只執行其中的某一個線程,你可以把線程執行時間調長點就能看到結果了(如在線程中加上for 循環,循環時間長點)

Ⅱ java線程wait方法

  1. wait和notify是用在多線程競爭同一鎖資源的情況下使用的。

  2. 你這段代碼實際是個單線程,這個線程自己把自己阻塞了,自然不可能自己把自己喚醒。

  3. 你的意圖怎麼實現呢?需要加入另外一個線程,下面是我仿照你的意圖寫的一段代碼,供參考下



  4. publicclassA
    {
    publicA(){
    finalAa=this;
    Threadth1=newThread(){
    @Override
    publicvoidrun(){
    //一直循環,去嘗試著喚醒a
    try
    {
    this.sleep(10000);
    }catch(InterruptedExceptione)
    {
    //TODOAuto-generatedcatchblock
    e.printStackTrace();
    }//為檢查是不是能真正實現喚醒a,等待10000毫秒,此時保證a已經處於等待狀態中。
    while(true){
    /**
    *用notify喚醒的線程必須是持有當前鎖對象的線程
    */
    synchronized(a){
    a.notify();
    }
    }
    }
    };
    th1.setDaemon(true);//這句也是必須的,將th1設為守護線程,保證在喚醒a以後,所有活動的線程都為守護線程,jvm能及時推出
    th1.start();//和a.run的順序不可以換
    this.run();
    }

    publicstaticvoidmain(String[]args)
    {
    newA();
    }

    publicvoidrun()
    {
    /**
    *這里可以換成這樣,直接鎖住this就行了
    */
    synchronized(this)
    {
    try
    {

    this.wait();//阻塞當前的線程
    }catch(InterruptedExceptione)
    {
    //TODOAuto-generatedcatchblock
    e.printStackTrace();
    }finally{
    System.out.println("1");//執行finally
    }
    }


    }

    }

Ⅲ java中怎樣使用線程在調用一個函數後過幾秒鍾再調用另一個函數

應該有必要開啟一個新的線程去監視isover線程是否結束,
一來 可以解決線程isover因為執行時間過長導致超時的問題
而來 也能通過監測isover線程的狀態來實現線程結束再做其他處理的問題!
1、如果一個線程調用了某個對象的wait方法,那麼該線程進入到該對象的等待池中(並且已經將鎖釋放),
如果未來的某一時刻,另外一個線程調用了相同對象的notify方法或者notifyAll方法,
那麼該等待池中的線程就會被喚起,然後進入到對象的鎖池裡面去獲得該對象的鎖,
如果獲得鎖成功後,那麼該線程就會沿著wait方法之後的路徑繼續執行。注意是沿著wait方法之後
2.如果沒有直接性的調用同類里的其他介面,或者返回,結束等java關鍵字,代碼還是得往下執行的。

Ⅳ 線程調用wait方法,再在別的線程調用notify方法的問題

java裡面wait是使當前線程進入等待狀態 並非是終止釋放
當其他線程調用notify時 wait繼續工作 當然這個也只是僅限制在同一監視器 呵呵!

但是這個具體要看你怎麼寫的 才能知道是不是從頭執行 多線程時 可能 你這個wait等待時是10 別的線程執行一段時間以後 這個線程被notify時 可能從100開始執行 當然也可能不變 就是線程間互不通信

下次 最好能把你寫的代碼發上來 詳細分析。

Ⅳ java執行了wait()方法,為什麼還能夠正常的運行run方法內的代碼

你wait()掛起的是主線程,run()方法是在thread1線程內執行,兩者不沖突。

Ⅵ 在Java中直接調用wait()方法時,請問是讓哪個線程進入等待呢

main()所在的線程,這個線程包括一個Object對象,你需要在Object中啟用notify()才可以重新喚醒

Ⅶ java 中1、一個線程調用了wait(),隨後被notify()喚醒,這個線程會接著執行wait

1、如果一個線程調用了某個對象的wait方法,那麼該線程進入到該對象的等待池中(並且已經將鎖釋放),
如果未來的某一時刻,另外一個線程調用了相同對象的notify方法或者notifyAll方法,
那麼該等待池中的線程就會被喚起,然後進入到對象的鎖池裡面去獲得該對象的鎖,
如果獲得鎖成功後,那麼該線程就會沿著wait方法之後的路徑繼續執行。注意是沿著wait方法之後
2.如果沒有直接性的調用同類里的其他介面,或者返回,結束等java關鍵字,代碼還是得往下執行的。

Ⅷ java多線程關於Thread實例對象執行wait方法的問題

wait()方法只是讓當前線程(t1調用的,就是t1線程)在當前時間片不搶佔cpu,但下一個時間片該搶還是搶
正常都是子線程執行完,主線程才繼續執行,所以t1執行完,主線才會執行,而且是沒有障礙地執行
最後你那個同步鎖沒什麼用,因為沒有線程跟主線程搶著執行同步塊里的內容

Ⅸ 在synchronize代碼塊中調用wait後還會繼續執行後續的代碼嗎

wait是讓使用wait方法的對象等待,暫時先把對象鎖給讓出來,給其它持有該鎖的對象用,其它對象用完後再告知(notify)等待的那個對象可以繼續執行了,因此,只有在synchronized塊中才有意義(否則,如果大家並不遵循同步機制,那還等誰呢?根本沒人排隊,也就談不上等待和喚醒了)
以下是一個例子,用以展示這種機制:


publicclassThreadA{
publicstaticvoidmain(String[]args){
ThreadBb=newThreadB();
b.start();//主線程中啟動另外一個線程
System.out.println("bisstart....");
//括弧里的b是什麼意思,應該很好理解吧
synchronized(b){
try{
System.out.println("Waitingforbtocomplete...");
b.wait();//這一句是什麼意思,究竟誰等待?
System.out.println("ThreadBisCompleted.Nowbacktomainthread");
}catch(InterruptedExceptione){}
}
System.out.println("Totalis:"+b.total);
}
}

classThreadBextendsThread{
inttotal;
publicvoidrun(){
synchronized(this){
System.out.println("ThreadBisrunning..");
for(inti=0;i<=100;i++){
total+=i;
}
System.out.println("totalis"+total);
notify();
}
}
}


運行結果:
b is start....
Waiting for b to complete...
ThreadB is running..
total is 5050
ThreadB is Completed. Now back to main thread
Total is :5050

Ⅹ JAVA中,我在類中自己定義了一個方法,然後直接調用了wait()方法,請問是讓哪個線程等待呢

主線程main()

閱讀全文

與調用wait方法後線程會去哪裡相關的資料

熱點內容
坐骨神經如何快速緩解土方法 瀏覽:470
頸椎托的使用方法 瀏覽:600
oppo更改usb設置在哪裡設置方法 瀏覽:664
碳酸鋁銨的食用方法 瀏覽:705
檢測亞甲基藍的方法 瀏覽:243
圓橢圓度計算方法 瀏覽:795
鎳銅合金化學分析方法Ys325 瀏覽:189
霧化吸氧一體機使用方法圖片 瀏覽:697
看書是鍛煉孩子的好方法 瀏覽:759
面部皮肌炎最好的治療方法 瀏覽:816
水管吊頂吊箍安裝方法 瀏覽:172
澳大利亞貝拉米米粉的食用方法 瀏覽:809
三橋繼動閥安裝方法 瀏覽:604
中醫治老年人腰疼的最佳方法 瀏覽:213
黑貓男友的寵愛方法在哪裡可以看 瀏覽:745
腎陽虛中醫治療方法 瀏覽:840
成品檐溝排水安裝方法 瀏覽:726
如何管理硬碟的方法 瀏覽:505
膽萎縮怎麼治療方法 瀏覽:734
下巴帶狀皰疹神經痛的治療方法 瀏覽:672