A 线程打印 5 次 A,B 线程打印 10 次 B,C 线程打印 15 次 C,按照此顺序循环 10 轮。
我们的思路是定义一个标志flag,当flag==1时,线程1打印A;当flag==B时,线程2打印B;当flag==C时,打印C。
/**
*
* A 线程打印 5 次 A,B 线程打印 10 次 B,C 线程打印 15 次 C,按照此顺序循环 10 轮
*/
class ShareSource{
int flag = 1;
private Lock lock = new ReentrantLock();
//创建三个condition,一个condition本质上是绑定一个锁
Condition c1 = lock.newCondition();
Condition c2 = lock.newCondition();
Condition c3 = lock.newCondition();
//打印5次A
public void print5(int loop) throws InterruptedException {
lock.lock();
try {
while(flag!=1){
c1.await();
}
for (int i = 1; i <= loop; i++) {
System.out.println(Thread.currentThread().getName()+"打印出:A,当前为第"+i+"轮");
}
flag = 2; //修改标志位
c2.signal(); //通知线程B
} finally {
lock.unlock();
}
}
public void print10(int loop) throws InterruptedException {
lock.lock();
try {
while (flag!=2){
c2.await();
}
for (int i = 1; i <= loop; i++) {
System.out.println(Thread.currentThread().getName()+"打印出:B,当前为第"+i+"轮");
}
flag = 3;
c3.signal();
} finally {
lock.unlock();
}
}
public void print15(int loop) throws InterruptedException {
lock.lock();
try{
while(flag!=3){
c3.await();
}
for (int i = 1; i <= loop; i++) {
System.out.println(Thread.currentThread().getName()+"打印出:C,当前为第"+i+"轮");
}
flag = 1;
c1.signal();
}finally {
lock.unlock();
}
}
}
public class ThreadDemo03 {
public static void main(String[] args) {
ShareSource shareSource = new ShareSource();
new Thread(()->{
for (int i = 0; i < 10; i++) {
try {
shareSource.print5(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "线程A").start();
new Thread(()->{
for (int i = 0; i < 10; i++) {
try {
shareSource.print10(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "线程B").start();
new Thread(()->{
for (int i = 0; i < 10; i++) {
try {
shareSource.print15(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "线程C").start();
}
}
运行结果:
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
线程A打印出:A,当前为第1轮
线程A打印出:A,当前为第2轮
线程A打印出:A,当前为第3轮
线程A打印出:A,当前为第4轮
线程A打印出:A,当前为第5轮
线程B打印出:B,当前为第1轮
线程B打印出:B,当前为第2轮
线程B打印出:B,当前为第3轮
线程B打印出:B,当前为第4轮
线程B打印出:B,当前为第5轮
线程B打印出:B,当前为第6轮
线程B打印出:B,当前为第7轮
线程B打印出:B,当前为第8轮
线程B打印出:B,当前为第9轮
线程B打印出:B,当前为第10轮
线程C打印出:C,当前为第1轮
线程C打印出:C,当前为第2轮
线程C打印出:C,当前为第3轮
线程C打印出:C,当前为第4轮
线程C打印出:C,当前为第5轮
线程C打印出:C,当前为第6轮
线程C打印出:C,当前为第7轮
线程C打印出:C,当前为第8轮
线程C打印出:C,当前为第9轮
线程C打印出:C,当前为第10轮
线程C打印出:C,当前为第11轮
线程C打印出:C,当前为第12轮
线程C打印出:C,当前为第13轮
线程C打印出:C,当前为第14轮
线程C打印出:C,当前为第15轮
Process finished with exit code 0
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/125010.html