zoukankan      html  css  js  c++  java
  • 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的简单应用结束了

  • 相关阅读:
    第二阶段第九天
    第二阶段第八天
    一轮项目冲刺——移山小分队(3)
    一轮项目冲刺——移山小分队(2)
    典型用户和用户场景
    一轮项目冲刺——移山小分队
    寻找水王
    NABCD需求分析
    每日记录01
    二维数组最大连通和的求解
  • 原文地址:https://www.cnblogs.com/maigao/p/12955390.html
Copyright © 2011-2022 走看看