public class Test {
public static void main(String[] args) {
Test test = new Test();
//注意先newprintletter,三个线程共有,同时要用test.new 不然需要定义成静态类
PrintLetter printLetter = test.new PrintLetter();
//建立三个线程
new Thread(test.new PrintThread(printLetter, 'A')).start();
new Thread(test.new PrintThread(printLetter, 'B')).start();
new Thread(test.new PrintThread(printLetter, 'C')).start();
}
private class PrintLetter{//这个是公共的,从A开始,同时对每个线程自己也定义一个char
//定义成public也是可以的
char letter = 'A';
public char getLetter(){
return letter;
}
public void print(){
System.out.print(letter);
if(letter == 'C'){
System.out.println();
}
}
public void nextLetter(){
if(letter == 'A'){
letter = 'B';
}else if (letter == 'B'){
letter = 'C';
}else if(letter == 'C'){
letter = 'A';
}
}
}
private class PrintThread implements Runnable{
private PrintLetter printLetter;//重点比较自己的letter与printletter十分相同
private char letter;
public PrintThread(PrintLetter printLetter, char letter){
this.printLetter = printLetter;
this.letter = letter;
}
@Override
public void run(){
for(int i = 0; i < 3; i++){//要求循环输出10次
synchronized(printLetter){//注意new的时候printletter要作为三个线程所共有的
while(printLetter.letter != letter){//不相同就等待
try{
printLetter.wait();
}catch(Exception e){
e.printStackTrace();
}
}
//一旦相同了,就输出
printLetter.print();
printLetter.nextLetter();//同时改变当前的字母
printLetter.notifyAll();
}
}
}
}
}
用三个线程按顺序循环打印abc三个字母
最新推荐文章于 2024-08-12 00:17:43 发布