使用三个线程使得ABC 循环输出十次
package com.bonc;
public class ThreadTest {
private boolean isA = true;
private boolean isB = false;
private boolean isC = false;
private int count = 0;
class Print{
public synchronized void printA(){
while(isA){
System.out.print("A");
isA=false;
isB=true;
isC=false;
notifyAll();
}
while (!isA){
try {
wait();
}catch (Exception e){
e.printStackTrace();
}
}
}
public synchronized void printB(){
while (isB){
System.out.print("B");
isA=false;
isB = false;
isC=true;
notifyAll();
}
while (!isB){
// if (count>=10) break;
try {
wait();
}catch (Exception e){
e.printStackTrace();
}
}
}
private synchronized void printC(){
while (isC){
System.out.println("C");
count++;
// System.out.println(count);
isA=true;
isB=false;
isC=false;
notifyAll();
}
while (!isC){
if (count>=10) break;
try {
wait();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
class PrintThreadA implements Runnable{
private Print p;
public PrintThreadA(Print p){
this.p=p;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
p.printA();
}
}
}
class PrintThreadB implements Runnable{
private Print p;
public PrintThreadB(Print p){
this.p=p;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
p.printB();
}
}
}
class PrintThreadC implements Runnable{
private Print p;
public PrintThreadC(Print p){
this.p=p;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
p.printC();
// System.out.println(i);
}
}
}
public static void main(String[] args) {
ThreadTest threadTest = new ThreadTest();
Print print = threadTest.new Print();
PrintThreadA printThreadA = threadTest.new PrintThreadA(print);
PrintThreadB printThreadB = threadTest.new PrintThreadB(print);
PrintThreadC printThreadC = threadTest.new PrintThreadC(print);
new Thread(printThreadA).start();
new Thread(printThreadB).start();
new Thread(printThreadC).start();
}
}
运行结果: