最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 中線程等待與通知的實現(xiàn)

 更新時間:2017年09月25日 10:32:44   投稿:lqh  
這篇文章主要介紹了java 中線程等待與通知的實現(xiàn)的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這樣的功能,需要的朋友可以參考下

java 中線程等待與通知的實現(xiàn)

前言:

關(guān)于等待/通知,要記住的關(guān)鍵點是:

必須從同步環(huán)境內(nèi)調(diào)用wait()、notify()、notifyAll()方法。線程不能調(diào)用對象上等待或通知的方法,除非它擁有那個對象的鎖。

wait()、notify()、notifyAll()都是Object的實例方法。與每個對象具有鎖一樣,每個對象可以有一個線程列表,他們等待來自該信號(通知)。線程通過執(zhí)行對象上的wait()方法獲得這個等待列表。從那時候起,它不再執(zhí)行任何其他指令,直到調(diào)用對象的notify()方法為止。如果多個線程在同一個對象上等待,則將只選擇一個線程(不保證以何種順序)繼續(xù)執(zhí)行。如果沒有線程等待,則不采取任何特殊操作。

 示例代碼:

package threadwait;

public class ThreadA extends Thread{

  public int num = 0;

  public void run(){

    synchronized (this){//在此類對象上實現(xiàn)同步,this指代當(dāng)前對象

      for(int i = 0 ; i < 3 ; ++i)

       this.num+=i;

      notifyAll();//通知所有在這個對象上等待的線程開始執(zhí)行,在這里就是通知TestNotify主線程開始執(zhí)行

    }

  }

  public int getNum(){

    return this.num;

  }

}

package threadwait;

 

public class TestNotify{

  public static void main(String args[]){

    ThreadA threada = new ThreadA();

    threada.start();//threada線程有執(zhí)行的資格,但是還沒有開始執(zhí)行

    synchronized(threada){

      try{

       threada.wait();//主線程等待threada線程執(zhí)行結(jié)束才開始執(zhí)行

       //而且只有獲得了當(dāng)前threada對象的鎖之后才能執(zhí)行wait,就是說在同步域內(nèi)才可以執(zhí)行wait,執(zhí)行wait后放棄對象鎖

      }catch(InterruptedException e){

       e.printStackTrace();

      }

    }

    System.out.println(threada.getNum());

  }

}

同步可以是在class級別上的,synchronized(A.class),也可以是在對象級別上的synchronized(this),可以是靜態(tài)同步方法,static synchronized ,靜態(tài)同步方法是在class級別上的,非靜態(tài)同步方法是在類對象級別上的,一個類對象只有一個鎖,只有獲得了該鎖才可以對他執(zhí)行wait操作,后釋放掉該鎖。

更進一步的實例代碼如下:

package threadwait;

 

public class ThreadA extends Thread{

  public int num = 0;

  public void run(){

    synchronized (this){//在此類對象上實現(xiàn)同步,this指代當(dāng)前對象

      for(int i = 0 ; i < 3 ; ++i)

       this.num+=i;

      try{

       Thread.sleep(500);//如果ThreadB的三個示例線程在還沒有進入等待狀態(tài)之前就受到了notifyall的信號

       //那將會發(fā)生嚴(yán)重后果,因為調(diào)用notifyall的線程只可以調(diào)用一次notifyall,那造成等待的線程將永遠(yuǎn)等待下去

       //所以在此處讓它睡一小會,讓其他線程有時間進入等待狀態(tài)。

       //不然會收到

      }catch(InterruptedException e){

       e.printStackTrace();

      }

      notifyAll();//通知所有在這個對象上等待的線程開始執(zhí)行,在這里就是通知TestNotify主線程開始執(zhí)行

    }

//   notifyAll();

  }

  public int getNum(){

    return this.num;

  }

}

package threadwait;

 

public class ThreadB extends Thread{

  private ThreadA threada;

  public ThreadB(ThreadA ta){

    this.threada = ta;

  }

  public void run(){

    System.out.println(Thread.currentThread().getName()+" is waitting.");

    synchronized(threada){

      try{

       threada.wait();

      }catch(InterruptedException e){

       e.printStackTrace();

      }

      System.out.println(Thread.currentThread().getName()+" "+this.threada.getNum());

    }

   

  }

}

package threadwait;

 

public class TestNotify{

  public static void main(String args[]){

    ThreadA threada = new ThreadA();

    new ThreadB(threada).start();

    new ThreadB(threada).start();

    new ThreadB(threada).start();

    threada.start();

  }

}

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • java正則表達式簡單使用和網(wǎng)頁爬蟲的制作代碼

    java正則表達式簡單使用和網(wǎng)頁爬蟲的制作代碼

    java正則表達式簡單使用和網(wǎng)頁爬蟲的制作代碼,需要的朋友可以參考一下
    2013-05-05
  • Java基于JDBC實現(xiàn)事務(wù),銀行轉(zhuǎn)賬及貨物進出庫功能示例

    Java基于JDBC實現(xiàn)事務(wù),銀行轉(zhuǎn)賬及貨物進出庫功能示例

    這篇文章主要介紹了Java基于JDBC實現(xiàn)事務(wù),銀行轉(zhuǎn)賬及貨物進出庫功能,較為詳細(xì)的分析了事務(wù)操作的原理、實現(xiàn)方法及java基于jdbc連接數(shù)據(jù)庫實現(xiàn)銀行事務(wù)操作的相關(guān)技巧,需要的朋友可以參考下
    2017-12-12
  • alibaba?seata服務(wù)端具體實現(xiàn)

    alibaba?seata服務(wù)端具體實現(xiàn)

    seata是來處理分布式服務(wù)之間互相調(diào)用的事務(wù)問題,本文重點給大家介紹alibaba-seata實現(xiàn)方法,文中通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • futuretask源碼分析(推薦)

    futuretask源碼分析(推薦)

    這篇文章主要介紹了futuretask源碼分析(推薦),小編覺得還是挺不錯的,這里給大家分享下,供各位參考。
    2017-10-10
  • java中駝峰與下劃線的寫法互轉(zhuǎn)

    java中駝峰與下劃線的寫法互轉(zhuǎn)

    這篇文章主要介紹了java中駝峰與下橫線的寫法互轉(zhuǎn)方法,文中先是進行了簡單的介紹,之后跟大家分享了一個自己編寫的工具類的示例代碼,有需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • Java多線程之線程池七個參數(shù)詳解

    Java多線程之線程池七個參數(shù)詳解

    這篇文章主要介紹了Java多線程之線程池七個參數(shù)詳解,文中有很詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Intellij Idea新建SpringBoot項目方式

    Intellij Idea新建SpringBoot項目方式

    這篇文章主要介紹了Intellij Idea新建SpringBoot項目方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • JAVA JVM運行時數(shù)據(jù)區(qū)詳解

    JAVA JVM運行時數(shù)據(jù)區(qū)詳解

    這篇文章主要介紹了JVM運行時數(shù)據(jù)區(qū)劃分原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-09-09
  • 劍指Offer之Java算法習(xí)題精講數(shù)組與字符串題

    劍指Offer之Java算法習(xí)題精講數(shù)組與字符串題

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • Java中讓界面內(nèi)的時間及時更新示例代碼

    Java中讓界面內(nèi)的時間及時更新示例代碼

    這篇文章主要給大家介紹了關(guān)于Java中讓界面內(nèi)的時間及時更新的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論

长宁县| 丹江口市| 临高县| 信丰县| 刚察县| 屏东市| 蒲江县| 八宿县| 长治市| 井陉县| 五峰| 炎陵县| 平山县| 安新县| 贵南县| 叙永县| 奉贤区| 泰安市| 夏邑县| 宜都市| 三亚市| 葫芦岛市| 翁牛特旗| 康乐县| 项城市| 阿拉善盟| 渝北区| 临城县| 若尔盖县| 普定县| 墨玉县| 景泰县| 安龙县| 昌平区| 无棣县| 松桃| 白水县| 浙江省| 会昌县| 茶陵县| 海原县|