一个线程打印1~52,另一个线程打印A~Z,打印顺序是12A34B...5152Z

当多个线程需要协同完成一件事时,可以加锁+wait,notify一起完成。

思路分析,一个线程打印数字,每次打印两个数字,26次打印完,另一个线程打印字母,也是26次打印完;可以创建两个方法,一个方法打印数字,一个打印字母;还有创建一个全局变量用来控制具体执行的是哪个线程;每个方法都被执行26次。

public class Solution1006 {
    public static void main(String[] args) {
        MyObject my = new MyObject();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0; i<26; i++)
                    my.printNum();
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0; i<26; i++)
                    my.printA();
            }
        }).start();
    }
}

public class MyObject {
    private static boolean flag = true;
    public int count = 1;

    public synchronized void printNum(){
        while(flag == false){
            try {
                this.wait();
            }catch (InterruptedException e){
                e.printStackTrace();
            }

        }

        System.out.println((2*count-1));
        System.out.println(2*count);

        flag = false;
        this.notifyAll();
    }

    public synchronized void printA(){
        while(flag == true){
            try {
                this.wait();
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }

        System.out.println((char)(count+'A'-1));
        count++;
        flag = true;
        this.notifyAll();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值