线程交替打印A1B2C3实现一(Lock)

285 阅读1分钟

线程交替打印A1B2C3实现一(Lock)

问:线程如何交替打印A1B2C3?通过LOCK 实现。

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class LockTest {

  public static void main(String[] args) {

    Lock lock = new ReentrantLock();
    Condition condition1 = lock.newCondition();
    Condition condition2 = lock.newCondition();

    new Thread(() -> {
      for (char i = 'A'; i <= 'Z'; i++) {
        lock.lock();
        try {
          System.out.println(Thread.currentThread().getName() + "======== " + i);
          condition2.signal(); // 唤醒thread-1
          condition1.await(); // 让thread-A处于等待状态
          TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
          e.printStackTrace();
        } finally {
          lock.unlock();
        }
      }
    }, "thread-A").start();

    new Thread(() -> {
      for (int i = 1; i <= 26; i++) {
        lock.lock();
        try {
          System.out.println(Thread.currentThread().getName() + "======== " + i);
          condition1.signal(); // 唤醒thread-A
          condition2.await(); // 让thread-1处于等待状态
          TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
          e.printStackTrace();
        } finally {
          lock.unlock();
        }
      }
    }, "thread-1").start();
  }
}