为了账号安全,请及时绑定邮箱和手机立即绑定

线程笔试题:不明白为什么会输出pingpong而不是pongping

线程笔试题:不明白为什么会输出pingpong而不是pongping

饮歌长啸 2019-03-10 22:18:22
下面的代码输出pingpong,我不太明白为什么这个 System.out.print 会在 t.start之前输出我的想法是 应该会随机输出 pongping和pingpong,应该没有顺序的才对呀。。public class Test2 {    public static void main(String args[]) {         Thread t = new Thread() {            public void run() {                 pong();             }         };         t.start();         System.out.print("ping");     }    static void pong() {         System.out.print("pong");     } }
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

两个线程不在同一起跑线上,主线程都已经跑到System.out.print("ping");这一行了,t线程才刚刚开始,t线程总要经过一些准备吧,在多核CPU上,主线程大概率会先获得System.out对象,然后先输出ping。得想办法让两个线程站在统一起跑线上。

public static void main(String args[]) throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);
    Thread t = new Thread() {        public void run() {
            latch.countDown();
            System.out.print("pong");
        }
    };
    t.start();
    latch.await();//等一下线程t
    System.out.print("ping");
}//输出pingpong
pingpong
pingpong
pongping
pingpong


查看完整回答
反对 回复 2019-03-10
  • 2 回答
  • 0 关注
  • 620 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号