用多线程进行A,B,C不同次数的打印,规则:A 打印5次,B打印4次,C打印15次,A打印完B打印,B打印完C打印,循环10次
package com.atguigu.springcloud.controller;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockDemo {
private static int number =1;
private static Lock lock = new ReentrantLock();
private static Condition condA = lock.newCondition();
private static Condition condB = lock.newCondition();
private static Condition condC = lock.newCondition();
public static void printA(){
lock.lock();
try {
if(number != 1){
condA.await();
}
for(int i=1;i<=5;i++){
System.out.println("线程A"+" "+i);
}
number=2;
condB.signal();
}catch (Exception e){
System.out.println(e);
}finally {
lock.unlock();
}
}
public static void printB(){
lock.lock();
try {
if(number != 2){
condB.await();
}
for(int i=0;i<=4;i++){
System.out.println("线程B"+" "+i);
}
number = 3;
condC.signal();
}catch (Exception e){
}finally {
lock.unlock();
}
}
public static void printC(){
lock.lock();
try {
if(number != 3){
condC.await();
}
for(int i=1;i<=15;i++){
System.out.println("线程C"+" "+i);
}
number = 1;
condA.signal();
}catch (Exception e){
}finally {
lock.unlock();
}
}
public static void main(String [] args){
new Thread(()->{
for (int i=0;i<10;i++){
printA();
}
},"A").start();
new Thread(()->{
for(int i=0;i<10;i++){
printB();
}
},"B").start();
new Thread(()->{
for(int i =0;i<10;i++){
printC();
}
},"C").start();
}
}
版权声明:本文为qq_35872777原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。