每轮 aa先打印五次,bb再打印十次,最后cc打印十五次
执行三轮
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//1.创建资源类
class ShareResource{
//定义标志位
private int flag = 1; //1:aa 2:bb 3:cc
//创建lock锁
private Lock lock = new ReentrantLock();
//创建三个condition来控制三个线程
private Condition c1 = lock.newCondition();
private Condition c2 = lock.newCondition();
private Condition c3 = lock.newCondition();
//aa:打印五次
//loop:打印loop轮
public void print5(int loop) throws InterruptedException{
//上锁
lock.lock();
try{
//判断
while(flag != 1){
c1.await();
}
//干活
for(int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+":"+i+",loop:"+loop);
}
//通知
flag = 2;
c2.signal();
} finally {
lock.unlock();
}
}
//bb:打印十次
//loop:打印loop轮
public void print10(int loop) throws InterruptedException{
//上锁
lock.lock();
try{
//判断
while(flag != 2){
c2.await();
}
//干活
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+":"+i+",loop:"+loop);
}
//通知
flag = 3;
c3.signal();
}catch (InterruptedException e){
e.printStackTrace();
} finally {
lock.unlock();
}
}
//cc:打印十五次
//loop:打印loop轮
public void print15(int loop) throws InterruptedException{
//上锁
lock.lock();
try{
//判断
while(flag != 3){
c3.await();
}
//干活
for(int i=0;i<15;i++){
System.out.println(Thread.currentThread().getName()+":"+i+",loop:"+loop);
}
//通知
flag = 1;
c1.signal();
}catch (InterruptedException e){
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
public class ThreadDemo1 {
public static void main(String[] args) {
ShareResource shareResource = new ShareResource();
new Thread(() ->{
for(int i=0;i<3;i++){
try{
shareResource.print5(i);
}catch(Exception e) {
e.printStackTrace();
}
}
},"aa").start();
new Thread(() ->{
for(int i=0;i<3;i++){
try{
shareResource.print10(i);
}catch(Exception e) {
e.printStackTrace();
}
}
},"bb").start();
new Thread(() ->{
for(int i=0;i<3;i++){
try{
shareResource.print15(i);
}catch(Exception e) {
e.printStackTrace();
}
}
},"cc").start();
}
}
执行结果
aa:0,loop:0
aa:1,loop:0
aa:2,loop:0
aa:3,loop:0
aa:4,loop:0
bb:0,loop:0
bb:1,loop:0
bb:2,loop:0
bb:3,loop:0
bb:4,loop:0
bb:5,loop:0
bb:6,loop:0
bb:7,loop:0
bb:8,loop:0
bb:9,loop:0
cc:0,loop:0
cc:1,loop:0
cc:2,loop:0
cc:3,loop:0
cc:4,loop:0
cc:5,loop:0
cc:6,loop:0
cc:7,loop:0
cc:8,loop:0
cc:9,loop:0
cc:10,loop:0
cc:11,loop:0
cc:12,loop:0
cc:13,loop:0
cc:14,loop:0
aa:0,loop:1
aa:1,loop:1
aa:2,loop:1
aa:3,loop:1
aa:4,loop:1
bb:0,loop:1
bb:1,loop:1
bb:2,loop:1
bb:3,loop:1
bb:4,loop:1
bb:5,loop:1
bb:6,loop:1
bb:7,loop:1
bb:8,loop:1
bb:9,loop:1
cc:0,loop:1
cc:1,loop:1
cc:2,loop:1
cc:3,loop:1
cc:4,loop:1
cc:5,loop:1
cc:6,loop:1
cc:7,loop:1
cc:8,loop:1
cc:9,loop:1
cc:10,loop:1
cc:11,loop:1
cc:12,loop:1
cc:13,loop:1
cc:14,loop:1
aa:0,loop:2
aa:1,loop:2
aa:2,loop:2
aa:3,loop:2
aa:4,loop:2
bb:0,loop:2
bb:1,loop:2
bb:2,loop:2
bb:3,loop:2
bb:4,loop:2
bb:5,loop:2
bb:6,loop:2
bb:7,loop:2
bb:8,loop:2
bb:9,loop:2
cc:0,loop:2
cc:1,loop:2
cc:2,loop:2
cc:3,loop:2
cc:4,loop:2
cc:5,loop:2
cc:6,loop:2
cc:7,loop:2
cc:8,loop:2
cc:9,loop:2
cc:10,loop:2
cc:11,loop:2
cc:12,loop:2
cc:13,loop:2
cc:14,loop:2