用三个线程按顺序循环打印abc三个字母


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();
                }
            }
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值