weixin_43412497 2020-04-11 13:09 采纳率: 0%
浏览 117

多线程练习过程中不可以正常jvm不可以正常退出

在进行多线程学习时一个练习题:使用两个线程分别打印数字和字母,并控制两个线程交替进行。打印结果:1A2B........,但是在实现代码后发现线程不可以正常结束如图,求大神解围

public class TestPrint {
    public static void main(String[] args){
        Object lock = new Object();
        new Thread(()->{
            synchronized (lock) {
                for (int i = 1; i <= 26; i++) {
                    System.out.println(i);
                    lock.notify();
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        new Thread(()->{
            synchronized (lock) {
                for (int i = 1; i <= 26; i++) {
                    System.out.println((char)(i+64));
                    lock.notify();
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

图片说明

  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2020-04-11 15:25
    关注

    那是因为两个线程后面都执行了 lock.wait 阻塞等待了,需要第三个线程唤醒它们。在main 函数后面继续加上一段代码:

    try {
                Thread.sleep(1000);
                synchronized (lock) {
                    lock.notifyAll();
                }
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    

    main 线程休眠一秒后唤醒 lock 锁上阻塞的线程就可以了哦。Java 并发编程的技术知识我写过一个专栏,这类常见问题都有介绍,有兴趣可以看看哈。

    评论

报告相同问题?

悬赏问题

  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测