Java並發之Condition的簡單使用


注:大佬勿噴/

 

1,Condition的方法:第一次看到之后是否感覺到這應該是我看到方法數量極少數極少數類之一了吧。好了,我們先來說大概意思。wait: 等待嘛,沒什么大的事情,只是在前面加個“a"加以區別(個人理解啊)。

2,await():表示一直等待,直到被喚醒為止。

  await(long,TimeUnit): 這個是超時返回,給定一個時間,超過這個時間沒有處理,則返回false。

  signal();從等待隊列喚醒一個,signalAll()則是全部喚醒了。其它的。。。

3. 實現

  

//通過ReentrantLock 關聯 Condition
        static ReentrantLock lock = new ReentrantLock();
    static Condition condition = lock.newCondition();
//創建一個線程類
public
static class T1 extends Thread{ public T1(String name) { super(name); } @Override public void run() { //加鎖 lock.lock(); System.out.println(System.currentTimeMillis() + " , " + this.getName() + " , start"); try { //參數await()方法;如果沒有中斷消息,則超時,返回false boolean r = condition.await(5, TimeUnit.SECONDS); System.out.println(r); //awaitNanos方法(); // long r1 = condition.awaitNanos(TimeUnit.SECONDS.toNanos(5)); // System.out.println(r1); System.out.println(System.currentTimeMillis() + " , " + this.getName() + " , end"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { //解鎖 lock.unlock(); } } }

然后就是main函數:

//聲明 3個線程
public static void main(String[] args) throws InterruptedException {
        new T1("線程1").start();
        new T1("線程2").start();
        new T1("線程3").start();
        
        //休眠2s--> 返回?
        TimeUnit.SECONDS.sleep(2);
                
                 //這是喚醒線程了
                lock.lock(); 
          try { 
//              condition.signalAll(); 
              condition.signal();
              } 
          finally { lock.unlock(); }
}

結果:

接一下我們把  signal()   改為  signalAll():

  

好了,condition的簡單應用結束了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM