Java多线程之交替打印字符练习篇

要求
  • 开启两个线程交替打印如下字符串:A1B2C3D45E6F7G8H9I10J11K12L13M14N
    15O16P17Q18R19S20T21U22V23W24X25Y26
  • 线程1负责输出字母线程二负责输出数字
如下代码思路分析
  • 第一步:线程1首先唤醒(notify)等待锁的线程2,然后线程1自己放弃锁(wait)跳出同步代码块
  • 第二步:线程2获取到锁后唤醒(notify)线程1,然后线程2自己放弃锁,跳出同步代码块
  • 第三步:线程1获取锁接着第一步同步代码块后面执行打印出了大写字母A,接着唤醒(notify)线程2
  • 第四步:线程2获取到锁后接着第二步的同步代码块后打印出数字1
  • 第五步:按顺序重复执行一,二,三,四步骤
  • 注意点: 线程调用notify方法虽然会唤醒在等待锁的线程,但是当前线程不会立即释放锁同时被唤醒线程也不会立刻得到锁,而是要等待当前线程执行完同步代码块的线程,当前线程才释放锁,被唤醒线程才能得到
public class MyThread {
    private static char[] letterArray = {'0','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
    static final Object object = new Object();
    public static void main(String[] args)  {

        new Thread(()-> {
                for(int i=1; i<= 26 ;i++){
                    synchronized (object){
                        object.notify();
                        try {
                            object.wait();
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.print(letterArray[i]);
                        object.notify();
                    }
                }
        }).start();

        new Thread(()-> {
                for(int i=1;i<=26;i++){
                    synchronized (object){
                        object.notify();
                        try {
                            object.wait();
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.print(i);
                    }
                }
        }).start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值