示例:

    1. public class ReentrantLockConditionDemo {
    2. static ReentrantLock lock = new ReentrantLock(true);
    3. static Condition condition = lock.newCondition();
    4. public static void main(String[] args) {
    5. new Thread() {
    6. public void run() {
    7. lock.lock();
    8. System.out.println("第一个线程加锁");
    9. try {
    10. System.out.println("第一个线程释放锁并等待");
    11. condition.await();
    12. System.out.println("第一个线程重新获取锁");
    13. } catch (InterruptedException e) {
    14. e.printStackTrace();
    15. }
    16. lock.unlock();
    17. System.out.println("第一个线程释放锁");
    18. };
    19. }.start();
    20. try {
    21. Thread.sleep(1000);
    22. } catch (InterruptedException e) {
    23. e.printStackTrace();
    24. }
    25. new Thread() {
    26. public void run() {
    27. lock.lock();
    28. System.out.println("第二个线程加锁");
    29. System.out.println("第二个线程唤醒第一个线程");
    30. condition.signal();
    31. lock.unlock();
    32. System.out.println("第二个线程释放锁");
    33. };
    34. }.start();
    35. }
    36. }

    结果
    image.png