java線程Thread的join方法。

來源:互聯網
上載者:User

標籤:異常   div   art   wait   except   迴圈   new   其他   nal   

1,方法的作用:

  父線程等待子線程的執行。

  如果是join或者join(0),即等待時間長度是0,父線程就會一直等到子線程執行結束,

     如果是join(time),即等待時間長度是time數值,那父線程等待時間長度視情況而定:

    第一種:子線程執行時間長度不需要time時間長度,那麼父線程就可能不會等待到time時間長度,為什麼是可能呢?是不是要考慮其他線程(不包括父線程,和子線程以外的線程),他也可能讓父線程等待的(沒有擷取到cpu時間片等原因),

    第二種:子線程執行時間長度超過time時間長度,那麼父線程的等待時間長度,至少是time時間長度,

2,源碼分析:

 

 1  public final synchronized void join(long millis) 2     throws InterruptedException { 3         long base = System.currentTimeMillis(); 4         long now = 0; 5  6         if (millis < 0) { 7             throw new IllegalArgumentException("timeout value is negative"); 8         } 9 10         if (millis == 0) {11             while (isAlive()) {12                 wait(0);13             }14         } else {15             while (isAlive()) {16                 long delay = millis - now;17                 if (delay <= 0) {18                     break;19                 }20                 wait(delay);21                 now = System.currentTimeMillis() - base;22             }23         }24     }

  

    1.首先確定的是join方法的形參必須是大於零的數值,否則該方法拋出異常IllegalArgumentException("timeout value is negative");

   2. join(0),進入迴圈:

       while (isAlive()) {

               wait(0);

      } 
     
那麼isAlive是什麼意思呢? isAlive是指子線程start並且run方法還沒執行完,子線程是活著的,所以如果你在子線程start之前,調用join方法,是沒任何效果的,此時子線程是死的。
  3.join(time),進入迴圈:
          while (isAlive()) {
          long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; }
   代碼意思:

      第一種:子線程執行時間長度不需要time時間長度,那麼父線程就可能不會等待到time時間長度,迴圈條件isAlive()=false,父線程出來了

      第二種:子線程執行時間長度超過time時間長度,那麼父線程的等待時間長度,至少是time時間長度,父線程break出來的。

 

總結:

  你要記住的唯一結論是:父線程肯定會等子線程執行一段時間,至於這段時間是多少?要區別看待,

  join(0)時:肯定是等到子線程執行完,父線程再執行;

    join(time)時:等到子線程執行完     或者    至少等time時間長度,父線程再執行。

java線程Thread的join方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.