import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
/*
LOCK需要使用条件唤醒
*/
public class ConditionReentrantLock implements Runnable {
private ReentrantLock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
static int i = 100;
public static void main(String[] args) {
ConditionReentrantLock conditionReentrantLock = new ConditionReentrantLock();
new Thread(conditionReentrantLock).start();
new Thread(conditionReentrantLock).start();
}
@Override
public void run() {
while (true) {
try {
lock.lock();
condition.signal();
if (i > 0) {
System.out.println(Thread.currentThread().getName() + ":" + i);
i--;
condition.await();
} else break;
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
}
![](https://img-blog.csdnimg.cn/img_convert/65a3cfbd33fa4b09bded9c5cc2d40b80.png)
类似于Synchronized锁的wait和notify
Lock锁释放锁前先阻塞,等其他线程获取锁再唤醒此线程,才能控制打印顺序