要求三个线程按顺序打印,第一个线程打印A,第二个线程打印B,第三个线程打印C,一共执行10轮,该怎么实现呢?
package com.xingli.springlearningdemo.lock;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* description: 打印類<br>
* version: 1.0 <br>
* @date: 2021/6/18 0018 上午 8:55 <br>
* @author: William <br>
*/
class Printer{
private int number =1;
private Lock lock = new ReentrantLock();
private Condition condition1 = lock.newCondition();
private Condition condition2 = lock.newCondition();
private Condition condition3 = lock.newCondition();
public void print5(){
lock.lock();
try {
//判断
while(number != 1){
condition1.await();
}
//干活
for (int i = 1; i <= 5; i++) {
System.out.println("A"+"---------------"+i);
}
//通知
number =2;
condition2.signal();
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
public void print10(){
lock.lock();
try {
//判断
while(number != 2){
condition2.await();
}
//干活
for (int i = 1; i <= 10; i++) {
System.out.println("B--------------------"+i);
}
//通知
number =3;
condition3.signal();
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
public void print15(){
lock.lock();
try {
//判断
while(number != 3){
condition3.await();
}
//干活
for (int i = 1; i <= 15; i++) {
System.out.println("C------------------"+i);
}
//通知
number =1;
condition1.signal();
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
/**
* description: LockDemo <br>
*
* @date: 2021/6/18 0018 上午 8:54 <br>
* @author: William <br>
* version: 1.0 <br>
*/
public class LockDemo {
public static void main(String[] args) {
Printer printer = new Printer();
new Thread(()->{
for (int i = 0; i < 10; i++) {
printer.print5();
}
},"A").start();
new Thread(()->{
for (int i = 0; i < 10; i++) {
printer.print10();
}
},"B").start();
new Thread(()->{
for (int i = 0; i < 10; i++) {
printer.print15();
}
},"C").start();
}
}