class ThreeThreadPrinter1 { // 创建一个对象作为锁对象 private val lock = Object() private var num = 0 fun printA() { for (i in 0..100) { synchronized(lock) { while (num % 3 != 0) { lock.wait() } println("A") num++ lock.notifyAll() } } }
// 打印B的方法 fun printB() { for (i in 0..100) { synchronized(lock) { while (num % 3 != 1) { lock.wait() } println("B") num++ lock.notifyAll() } } }
// 打印C的方法 fun printC() { for (i in 0..100) { synchronized(lock) { while (num % 3 != 2) { lock.wait() } println("C") num++ lock.notifyAll() } } }
companion object { @JvmStatic fun main(args: Array<String>) { val printer = ThreeThreadPrinter1() // 创建三个线程,分别调用printA, printB, printC方法 val threadA = Thread { printer.printA() } val threadB = Thread { printer.printB() } val threadC = Thread { printer.printC() } // 启动三个线程 threadA.start() threadB.start() threadC.start() // 等待3个线程执行完了之后,再退出main线程 threadA.join() threadB.join() threadC.join() } } }
// 创建一个可重入锁 private final ReentrantLock lock = new ReentrantLock(); // 创建一个Condition对象,用于线程间的协调 private final Condition condition = lock.newCondition(); // 用于跟踪当前应该打印哪个字符的状态变量 private int state = 0;