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

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

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

    posts - 28,  comments - 15,  trackbacks - 0
        java在1.2版本引入wait-and-notify機制,用于線程間通信,它能夠讓某個線程與其他線程在特定條件符合時進行通信;而條件變量是在1.5版本中concurrency包中提供的,條件變量是一種有其多其他多線程系統所提供的同步類型,它與java的wai-and-notify機制非常類似,下面我們通過實例的方式來探討他們之間的區別。
         wai-and-notify示例代碼:
    package com.zxl.thread.notify;
    /**
     * 
     * 
    @author zhangxl
     *
     
    */

    public class SynThread1 extends Thread {
        
        
    private Object lockObj;
        
    private volatile int i = 0;
        
    public SynThread1(Object lockObj){
            
    this.lockObj = lockObj;
        }


        
    public void run(){
            
            
    synchronized(lockObj){
                
    while(true){
                    
    if(i==0){
                        
    try {
                            System.out.println(Thread.currentThread().getName()
    +" will be waiting.");
                            lockObj.wait();
                        }
     catch (InterruptedException e) {
                            
    // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }

                    
                    System.out.println(Thread.currentThread().getName()
    +": i="+i);
                    
    //i++;
                    
                    
    if(i>=1return;
                }

            }

        }

        
        
    public static void  main(String[] arg){
            
            Object lock 
    = new Object();
            
            SynThread1 t1 
    = new SynThread1(lock);
            t1.setName(
    "SynThread_1");
            SynThread1 t2 
    = new SynThread1(lock);
            t2.setName(
    "SynThread_2");
            t2.start();
            t1.start();
            
            
            
            
    try {
                Thread.sleep(
    1000);
                
                
    synchronized(lock){
                    lock.notify();    
    //通過結果觀察,sun JVM(hotspot)的通知機制極有可能是FIFO的策略,原因是t1、t2只要誰先啟動,誰就將被喚醒。
                }

            }
     catch (InterruptedException e) {
                
    // TODO Aut o-generated catch block            e.printStackTrace();
            }

        }

    }



    條件變量示例:

    package com.zxl.thread.notify;

    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.ReentrantLock;

    public class ConditionThread implements Runnable {
     
     
     
     private ReentrantLock lock;
     
     private Condition c;
     
     private volatile int i=0;
     
     public ConditionThread(ReentrantLock lock){
      this.lock = lock;
      c = lock.newCondition();
     }

     public void run() {
      
      lock.lock();
      
      try{
       
       while(true){
        if(i==0){
         System.out.println(Thread.currentThread().getName()+" will be waiting...");
         c.await();
        }
        
        System.out.println(Thread.currentThread().getName()+" is already waked up,i="+i);
        
        if(i>=1) return;
       }
       
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      finally{
       lock.unlock();
      }
      
      
      
     }
     
     public Condition getCondition(){
      return c;
     }
     
     public static void main(String[] args){
      
      
      
      ReentrantLock lock = new ReentrantLock();
      ConditionThread ct1 = new ConditionThread(lock);
      ConditionThread ct2 = new ConditionThread(lock);
      Thread t1 = new Thread(ct1);
      t1.setName("C_Thread_1");
      Thread t2 = new Thread(ct2);
      t2.setName("C_Thread_2");
      
      t1.start();
      t2.start();
      
      try {
       Thread.sleep(1000);
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      
      lock.lock();
      ct1.getCondition().signal();   //喚醒第一個線程
      lock.unlock();
     }

    }









    posted on 2011-07-28 12:11 zhangxl 閱讀(779) 評論(0)  編輯  收藏 所屬分類: java 并發
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆分類(17)

    隨筆檔案(28)

    文章分類(30)

    文章檔案(30)

    相冊

    收藏夾(2)

    hibernate

    java基礎

    mysql

    xml

    關注

    壓力測試

    算法

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 96299
    • 排名 - 601

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 美女视频黄视大全视频免费的| 亚洲jizzjizz少妇| 久久亚洲精品国产精品| 亚洲欧洲另类春色校园网站| 欧洲精品码一区二区三区免费看| 久9热免费精品视频在线观看| 麻豆国产VA免费精品高清在线| 亚洲成AV人片在线观看无码| 亚洲精品久久无码| 国产精品二区三区免费播放心| 亚洲综合激情九月婷婷| 精品免费久久久久国产一区| 大香人蕉免费视频75| 亚洲av无码av制服另类专区| 国产成人综合亚洲| 久久WWW免费人成人片| 亚洲图片一区二区| a在线观看免费网址大全| 免费在线观看的黄色网址| 亚洲精品二三区伊人久久| 天天天欲色欲色WWW免费| jizz在线免费观看| 又大又黄又粗又爽的免费视频| 日韩电影免费在线观看网址 | 国产成人1024精品免费| 中文字幕久久亚洲一区| 直接进入免费看黄的网站| 最新精品亚洲成a人在线观看| 免费中文字幕不卡视频| 亚洲激情电影在线| 在线视频免费观看爽爽爽| 在线观看成人免费视频| 男女啪啪免费体验区| 亚洲AV中文无码乱人伦在线视色| 亚洲码在线中文在线观看| 24小时日本在线www免费的| 免费大片av手机看片| 亚洲第一网站免费视频| 亚洲成人一区二区| 精品国产污污免费网站aⅴ| 亚洲国产综合自在线另类|