首页 > 试题广场 >

给出下列JAVA程序执行结果: &nbs...

[单选题]
给出下列JAVA程序执行结果:                         
public static void main(String args[]) {
        Thread t = new Thread() {
            public void run() {
                pong();
            }
        };
        t.run();
     System.out.print("ping");
    }
    static void pong() {
        System.out.print("pong");
      }
  • pingpong
  • pongping
  • pingpong和pongping都有可能
  • 都不输出
主线程和新创建的线程应该是交替执行的吧,无法确定顺序,另外,run改成start才是开启线程啊
发表于 2020-03-03 00:39:55 回复(1)
记得老师说过,run()方法不会启动新的线程,这里只有一个主线程,所以顺序执行,假如这里用start()方法,就会启动新的线程,而ping和pong两个线程并不知道哪个先执行就是答案就是C。不对请指正。
编辑于 2019-05-17 09:17:56 回复(5)
代码从上向下运行,到  t.run  的时候回调用  run()  方法,run()方法调用Pong()方法,输出pong没有换行,然后输出ping,没有换行
所以就是pongping
 
发表于 2019-05-15 18:31:23 回复(0)
Thread t = new Thread() {
    public void run() {             
        pong();
    }
};
t.run();
不开启新的线程

Thread t = new Thread() {
    public void start() {             
        pong();
    }
};
t.start();
开启新的线程

发表于 2022-04-28 15:54:46 回复(0)

查看Thread.java类源码,发现只有当线程类通过构造函数传入Runnable实现类时,该实现类对象才会被调用。否则不做任何事情直接返回:

public class Thread {

    private Runnable target;

    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

}
发表于 2019-05-25 20:30:38 回复(0)
要是重排序呢,又没有依赖关系,pingpong不也有可能
编辑于 2019-05-16 00:56:54 回复(0)