<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對(duì)文章有任何疑問(wèn)或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂(lè)園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

     

    多線程wait和notify的理解

    對(duì)多線程編程里wait() notify()的精確論述:這一對(duì)方法直接隸屬于 Object 類,也就是說(shuō),所有對(duì)象都擁有這一對(duì)方法。

    初看起來(lái)這十分不可思議,但是實(shí)際上卻是很自然的,因?yàn)檫@一對(duì)方法阻塞時(shí)要釋放占用的鎖,而鎖是任何對(duì)象都具有的,調(diào)用任意對(duì)象的 wait() 方法導(dǎo)致線程阻塞,并且該對(duì)象上的鎖被釋放。而調(diào)用 任意對(duì)象的notify()方法則導(dǎo)致因調(diào)用該對(duì)象的 wait() 方法而阻塞的線程中隨機(jī)選擇的一個(gè)解除阻塞(但要等到獲得鎖后才真正可執(zhí)行)。

    其次,前面敘述的所有方法都可在任何位置調(diào)用,但是這一對(duì)方法卻必須在 synchronized 方法或塊中調(diào)用,理由也很簡(jiǎn)單,只有在synchronized 方法或塊中當(dāng)前線程才占有鎖,才有鎖可以釋放。同樣的道理,調(diào)用這一對(duì)方法的對(duì)象上的鎖必須為當(dāng)前線程所擁有,這樣才有鎖可以釋放。因此,這一對(duì)方法調(diào)用 必須放置在這樣的 synchronized 方法或塊中,該方法或塊的上鎖對(duì)象就是調(diào)用這一對(duì)方法的對(duì)象。若不滿足這一條件,則程序雖然仍能編譯,但在運(yùn)行時(shí)會(huì)出現(xiàn) IllegalMonitorStateException 異常


    下面的這個(gè)例子很好的反映了wait()和notify()或者notifyAll()的用法
    public class Main {
    /**
    * 這是5個(gè)工人干活的例子,因?yàn)楣と说男什灰粯?效率高的先完成任務(wù),
    * 然后休息,當(dāng)最后的一個(gè)工人完成工作的時(shí)候通知所有的人,所有工人又重新開(kāi)始干活了;
    * 線程與線程組編制成了一個(gè)線程樹(shù),樹(shù)干是線程組,樹(shù)葉是線程,而這顆樹(shù)的根就是系統(tǒng)a線程組.
    */
    public static void main(String[] args) throws InterruptedException {
    Resource r = new Resource(4);
    ThreadGroup tg = new ThreadGroup("GT");
    new Thread(tg, new Worker(r,8)).start();
    new Thread(tg, new Worker(r,12)).start();
    new Thread(tg, new Worker(r,22)).start();
    new Thread(tg, new Worker(r,16)).start();
    new Thread(tg, new Worker(r,20)).start();
    new Thread(tg, new Manager()).start();
    }
    }
    public class Worker implements Runnable {
    private Resource r;
    /**
    * the mission
    */
    private int efficiency;
    public Worker(Resource r,int efficiency){
    this.r = r;
    this.efficiency = efficiency;
    }

    public void run() {
    int i = 0;
    while(true){
    System.out.println(Thread.currentThread()+" is working");
    i ++;
    if(i == efficiency){
    i = 0;
    r.waitForAll();
    }
    try {
    Thread.currentThread().sleep(1000);
    }
    catch (InterruptedException ex) {
    ex.printStackTrace();
    }
    }
    }
    }
    public class Worker implements Runnable {
    private Resource r;
    /**
    * the mission
    */
    private int efficiency;
    public Worker(Resource r,int efficiency){
    this.r = r;
    this.efficiency = efficiency;
    }

    public void run() {
    int i = 0;
    while(true){
    System.out.println(Thread.currentThread()+" is working");
    i ++;
    if(i == efficiency){
    i = 0;
    r.waitForAll();
    }
    try {
    Thread.currentThread().sleep(1000);
    }
    catch (InterruptedException ex) {
    ex.printStackTrace();
    }
    }
    }
    }

    posted on 2008-11-07 12:01 找個(gè)美女做老婆 閱讀(1581) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 妻子5免费完整高清电视| 亚洲色精品vr一区二区三区| 国产亚洲精品2021自在线| 国产亚洲精午夜久久久久久| 免费无码又爽又刺激高潮视频 | 热久久精品免费视频| 一级毛片免费在线| 亚洲短视频在线观看| 免费jlzzjlzz在线播放视频| 久久大香伊焦在人线免费| 亚洲欧洲精品成人久久曰| 国产亚洲一区二区手机在线观看 | 国产大片51精品免费观看| 免费无码av片在线观看| 亚洲最大天堂无码精品区| 夜夜春亚洲嫩草影院| 成年人免费观看视频网站| 一个人看的www免费视频在线观看 一个人免费视频观看在线www | 亚欧乱色国产精品免费视频| 亚洲人成网站日本片| 亚洲一区AV无码少妇电影☆| 免费电视剧在线观看| 免费看一区二区三区四区| 亚洲第一成年网站视频| 67pao强力打造67194在线午夜亚洲 | 亚洲高清最新av网站| 91免费在线播放| 久久免费99精品国产自在现线 | 亚洲AV无码精品蜜桃| 亚洲精品无码不卡在线播放HE| 色婷婷7777免费视频在线观看| 中文字幕无线码免费人妻| 亚洲欧美国产国产一区二区三区| 久久精品国产精品亚洲色婷婷| 免费国产怡红院在线观看| 青青青国产在线观看免费网站| 日本免费A级毛一片| 午夜免费国产体验区免费的 | 蜜芽亚洲av无码一区二区三区| 亚洲中文字幕无码av在线| 国产成人精品日本亚洲网站|