-
lock是synchronized的代替方案
-
所以也提供了类似于synchronized配合wait相关的功能
-
注意:这里使用的不是lock对象的wait方法
-
通过lock对象可以获得一个condition对象,表示条件对象
当业务逻辑中不满足某些条件的时候,可以基于Condition条件对象进行等待
Condition condition = lock.newCondition();
-
当业务执行时,遇到等待条件,通过调用
condition.await(); // "buka".wait()
线程等待进入等待队列
-
当另一个线程使用完锁之后,通过调用
condition.signal() or singalAll()
唤醒线程 -
将等待队列中的线程重新加入同步队列
-
public static void main(String[] args) throws InterruptedException { Lock lock = new ReentrantLock(); //这就是用来表示i==5的这个等待条件 Condition condition = lock.newCondition(); Thread t1 = new Thread(()->{ lock.lock(); for(int i=1;i<=10;i++){ System.out.println(i); Thread.sleep(1000); if( i == 5 ){ condition.await(); // "buka".wait() } } lock.unlock(); }); t1.start(); Thread.sleep(10); Thread t2 = new Thread(()->{ lock.lock(); for(int i=11;i<=20;i++){ System.out.println(i); } condition.signal(); lock.unlock(); }); t2.start(); }
03-24
1371
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
12-13
3万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-24