欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JAVA多線程之方法JOIN詳解及實(shí)例代碼

JAVA多線程 JOIN

十載的象山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整象山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“象山網(wǎng)站設(shè)計(jì)”,“象山網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

 對于Java開發(fā)人員,多線程應(yīng)該是必須熟練應(yīng)用的知識點(diǎn),特別是開發(fā)基于Java語言的產(chǎn)品。本文將深入淺出的表述Java多線程的知識點(diǎn),在后續(xù)的系列里將側(cè)重于Java5由Doug Lea教授提供的Concurrent并行包的設(shè)計(jì)思想以及具體實(shí)現(xiàn)與應(yīng)用。

    如何才能深入淺出呢,我的理解是帶著問題,而不是泛泛的看。所以該系列基本以解決問題為主,當(dāng)然我也非常希望讀者能夠提出更好的解決問題的方案以及提出更多的問題。由于水平有限,如果有什么錯誤之處,請大家提出,共同討論,總之,我希望通過該系列我們能夠深入理解Java多線程來解決我們實(shí)際開發(fā)的問題。

    作為開發(fā)人員,我想沒有必要討論多線程的基礎(chǔ)知識,比如什么是線程? 如何創(chuàng)建等 ,這些知識點(diǎn)是可以通過書本和Google獲得的。本系列主要是如何理深入解多線程來幫助我們平時的開發(fā),比如線程池如何實(shí)現(xiàn)? 如何應(yīng)用鎖等。 

(1)方法Join是干啥用的? 簡單回答,同步,如何同步? 怎么實(shí)現(xiàn)的? 下面將逐個回答。
    自從接觸Java多線程,一直對Join理解不了。JDK是這樣說的:

  join
  public final void join(long millis)throws InterruptedException
  Waits at most millis milliseconds for this thread to die. A timeout of 0 means to wait forever.

 大家能理解嗎? 字面意思是等待一段時間直到這個線程死亡,我的疑問是那個線程,是它本身的線程還是調(diào)用它的線程的,上代碼:

package concurrentstudy;
/**
 *
 * @author vma
 */
public class JoinTest {
  public static void main(String[] args) {
    Thread t = new Thread(new RunnableImpl());
    t.start();
    try {
      t.join(1000);
      System.out.println("joinFinish");
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
   
    }
  }
}
class RunnableImpl implements Runnable {

  @Override
  public void run() {
    try {
      System.out.println("Begin sleep");
      Thread.sleep(1000);
      System.out.println("End sleep");
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

  }
}

結(jié)果是:

Begin sleep
End sleep
joinFinish

明白了吧,當(dāng)main線程調(diào)用t.join時,main線程等待t線程,等待時間是1000,如果t線程Sleep 2000呢 

 public void run() {
    try {
      System.out.println("Begin sleep");
      // Thread.sleep(1000);
      Thread.sleep(2000);
      System.out.println("End sleep");
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

  }

結(jié)果是:

Begin sleep
joinFinish
End sleep

也就是說main線程只等1000毫秒,不管T什么時候結(jié)束,如果是t.join()呢, 看代碼:  

public final void join() throws InterruptedException {
  join(0);
  }

就是說如果是t.join() = t.join(0) 0 JDK這樣說的 A timeout of 0 means to wait forever 字面意思是永遠(yuǎn)等待,是這樣嗎?
其實(shí)是等到t結(jié)束后。

這個是怎么實(shí)現(xiàn)的嗎? 看JDK代碼:

 /**
   * Waits at most <code>millis</code> milliseconds for this thread to 
   * die. A timeout of <code>0</code> means to wait forever. 
   *
   * @param   millis  the time to wait in milliseconds.
   * @exception InterruptedException if any thread has interrupted
   *       the current thread. The <i>interrupted status</i> of the
   *       current thread is cleared when this exception is thrown.
   */
  public final synchronized void join(long millis) 
  throws InterruptedException {
  long base = System.currentTimeMillis();
  long now = 0;

  if (millis < 0) {
      throw new IllegalArgumentException("timeout value is negative");
  }

  if (millis == 0) {
    while (isAlive()) {
    wait(0);
    }
  } else {
    while (isAlive()) {
    long delay = millis - now;
    if (delay <= 0) {
      break;
    }
    wait(delay);
    now = System.currentTimeMillis() - base;
    }
  }
  }

其實(shí)Join方法實(shí)現(xiàn)是通過wait(小提示:Object 提供的方法)。 當(dāng)main線程調(diào)用t.join時候,main線程會獲得線程對象t的鎖(wait 意味著拿到該對象的鎖),調(diào)用該對象的wait(等待時間),直到該對象喚醒main線程,比如退出后。

這就意味著main 線程調(diào)用t.join時,必須能夠拿到線程t對象的鎖,如果拿不到它是無法wait的,剛開的例子t.join(1000)不是說明了main線程等待1秒,如果在它等待之前,其他線程獲取了t對象的鎖,它等待時間可不就是1毫秒了。上代碼介紹:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package concurrentstudy;
/**
 *
 * @author vma
 */
public class JoinTest {
  public static void main(String[] args) {
    Thread t = new Thread(new RunnableImpl());
    new ThreadTest(t).start();
    t.start();
    try {
      t.join();
      System.out.println("joinFinish");
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
   
    }
  }
}
class ThreadTest extends Thread {

  Thread thread;

  public ThreadTest(Thread thread) {
    this.thread = thread;
  }

  @Override
  public void run() {
    holdThreadLock();
  }

  public void holdThreadLock() {
    synchronized (thread) {
      System.out.println("getObjectLock");
      try {
        Thread.sleep(9000);

      } catch (InterruptedException ex) {
       ex.printStackTrace();
      }
      System.out.println("ReleaseObjectLock");
    }

  }
}

class RunnableImpl implements Runnable {

  @Override
  public void run() {
    try {
      System.out.println("Begin sleep");
      Thread.sleep(2000);
      System.out.println("End sleep");
    } catch (InterruptedException e) {
      e.printStackTrace();
    }


  }
}

在main方法中 通過new ThreadTest(t).start();實(shí)例化ThreadTest 線程對象, 它在holdThreadLock()方法中,通過synchronized (thread),獲取線程對象t的鎖,并Sleep(9000)后釋放,這就意味著,即使main方法t.join(1000),等待一秒鐘,它必須等待ThreadTest 線程釋放t鎖后才能進(jìn)入wait方法中,它實(shí)際等待時間是9000+1000 MS

運(yùn)行結(jié)果是:

getObjectLock
Begin sleep
End sleep
ReleaseObjectLock
joinFinish

小結(jié):

本節(jié)主要深入淺出join及JDK中的實(shí)現(xiàn)。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

網(wǎng)站題目:JAVA多線程之方法JOIN詳解及實(shí)例代碼
分享鏈接:http://aaarwkj.com/article8/igddip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站營銷、品牌網(wǎng)站建設(shè)、動態(tài)網(wǎng)站品牌網(wǎng)站制作、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
午夜视频在线看一区免费| 视频一区视频二区在线| 日韩国产欧美色资源在线| 亚洲精品a在线观看av| 亚洲大尺码在线视频香蕉| 久久精品人妻一区二区| 亚洲一区二区三区精品国产| 久久久人妻91久久久久| 亚洲欧美日韩颜射极品| 久草尤物视频在线观看| 日韩精品一区二区三区人妻视频| 欧美精品中出一区二区三区 | 91久久国产综合久久91| 一区二区三区都市激情| 欧美电影剧情av在线| 九九九视频精品免费九九| 欧美日韩伦理片在线观看| 91香蕉国产精品日韩| 欧美夫妻香蕉视频网站| 白白色手机视频免费看| 人妻少妇久久中文字幕韩| 日韩一二三区欧美四五区新| 欧美日韩在线一区二区精品| 亚洲av乱码专区国产乱码| 亚洲国产日韩中文字幕| 男人天堂一区二区av| 精品熟女少妇av免费观看| 手机av在线 中文字幕| 日韩亚洲一区在线观看| 午夜18禁毛片免费看| 97资源视频在线播放| 午夜视频免费看一区二区| 99久久久国产精品蜜臀| 丝袜美腿蜜汁一龙二凤| 夜夜春久久天堂亚洲精品| 亚洲免费黄色大片网站| 日韩不卡区免费在线观看| 97在线亚洲欧美视频| 国产熟女碰碰人人a久久| 免费日本高清色噜噜视频| 国产亚洲精品a久久7777|