注:大佬勿喷/
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的简单应用结束了