} finally {
//释放锁
readLock.unlock();
}
}
}
执行结果
1 pool-1-thread-1拿到锁了
2 pool-1-thread-1等待信号 —释放锁-线程等待 t1
3 pool-1-thread-2拿到锁了
4 pool-1-thread-2发出信号 — 唤起线程t2释放锁
5 pool-1-thread-1拿到信号—t1继续执行
如示例所示,
一般都会将Condition对象作为成员变量。当调用await()方法后,当前线程会释放锁并在此等待,而其他线程调用Condition对象的signal()方法,通知当前线程后,当前线程才从await()方法返回,并且在返回前已经获取了锁。
Condition接口常用方法
===============
condition可以通俗的理解为条件队列。当一个线程在调用了await方法以后,直到线程等待的某个条件为真的时候才会被唤醒。这种方式为线程提供了更加简单的等待/通知模式。Condition必须要配合锁一起使用,因为对共享状态变量的访问发生在多线程环境下。一个Condition的实例必须与一个Lock绑定,因此Condition一般都是作为Lock的内部实现。
-
await() :造成当前线程在接到信号或被中断之前一直处于等待状态。