首页 > 试题广场 >

以下程序运行的结果为 ( )

[单选题]
以下程序运行的结果为 (   )
public class Example extends Thread{

@Override

public void run(){

try {

Thread.sleep(1000);

} catch (InterruptedException e){

e.printStackTrace();

}

System. out .print( "run" );

}

public static void main(String[] args){

Example example= new Example();

example.run();

System. out .print( "main" );

}
}
  • run main
  • main run
  • main
  • run
  • 不能确定
推荐

此题选A

此题的争议点只可能是runmain或mainrun

因为Example的run方法里面休眠了100ms,在当今电脑计算性能过剩的时代,如果是多线程启动,main方法肯定会打印出了main。

为啥是runmain而不是mainrun呢?

  1. 因为启动线程是调用start方法。
  2. 把线程的run方法当普通方法,就直接用实例.run()执行就好了。

没有看到start。所以是普通方法调用。
所以选A。

编辑于 2019-04-30 14:16:51 回复(8)
选A。考察的run()方法作为普通方法的调用通过线程start的启动调用的区别。对象.start()属于对线程的启动调用run()方法。
题目给出的example.run();是对象对普通方法的调用,所以由上到下依次执行输出:run main。

发表于 2019-04-29 14:52:48 回复(5)

调用example.run(),并没有创建新线程,只有main线程由上而下执行,Thread.sleep(1000)只是让main线程休眠了1000ms;最终打印出了run main

调用example.start(),创建了一个新线程,运行到Thread.sleep(1000),该线程休眠了1000ms;main线程先打印main,新创建的线程结束休眠后,打印run,最终打印出了main run

发表于 2020-10-31 22:23:51 回复(4)
example调用run(),而不是启动线程的start(),所以该程序会依次执行,先打印run,再打印main,所以选A
发表于 2019-07-12 17:52:23 回复(0)
A。
Thread调用run()方法只是调用了Runnable的run()方法,相当于普通方法,只有调用start()才启动一个新的线程。
发表于 2017-03-09 11:29:07 回复(2)
A
直接调用run方法只是执行一次run方法,没有启动线程。
发表于 2016-12-20 17:55:26 回复(0)
本题中调用的是run方法,并不是start方法,所以本题是单线程,顺序执行;
如果把run方法改成start方法,那么就是多线程了,可以获取当前线程名称,代码如下:
public class Example extends Thread{
    public void run(){
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e){
            e.printStackTrace();
        }
        System. out .println( "run" );
    }

    public static void main(String[] args){
        Example example= new Example();
		example.setName("thread1");
        example.start();
		System.out.println( "main" );
		ThreadGroup currentGroup=Thread.currentThread().getThreadGroup();
		int noThreads=currentGroup.activeCount();
		Thread[] lstThreads=new Thread[noThreads];
		currentGroup.enumerate(lstThreads);
		for(int i=0;i<noThreads;i++){
			System.out.println("线程号:"+i+"="+lstThreads[i].getName());
		}
        
    }
}


编辑于 2020-01-17 09:49:13 回复(0)
直接调run()就不是多线程,所以按正常运行,不管休眠多久。
发表于 2019-08-03 11:16:33 回复(0)
直接调用run()方法就是相当于普通方法,没有实现多线程,只有调用了start()方法才是实现了多线程。

1.start方法

用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法。但要注意的是,此时无需等待run()方法执行完毕,即可继续执行下面的代码。所以run()方法并没有实现多线程

2.run方法

run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。


发表于 2022-04-12 14:56:54 回复(0)
线程的开启需要调用start方法, 直接使用线程对象调用run方法并不能开启一个线程, 所以选择A
发表于 2019-04-29 15:00:55 回复(0)
意思就是没有创建新的线程,所以是主线程休眠了100ms,所以是按顺序输出。
如果是创建了新的线程(.start),就是新线程休眠了100ms,这样的话就不一定了
发表于 2022-05-08 18:24:47 回复(0)
选A,直接调用run(),就是单纯的调用这个方法,需要按顺序执行完了,才能执行下一个
发表于 2021-11-04 18:03:26 回复(0)
本题中调用的是run方法,并不是start方法,所以本题是单线程,顺序执行; 如果把run方法改成start方法,那么就是多线程了
发表于 2021-11-03 22:10:06 回复(0)
这里的run方法是普通方法 没有调用线程的start方法 所以从上到下执行
发表于 2021-09-28 16:55:07 回复(0)
可能是因为调用的是sleep()方法 ,该方***上锁,不释放,其余线程占用不了。
发表于 2021-09-17 21:50:50 回复(0)
<p>run是普通方法,没启动线程</p>
发表于 2020-12-19 12:37:46 回复(0)
他们是在同一个线程里面,他们执行的只是普通的方法!!
发表于 2020-07-21 00:17:35 回复(0)
此题选A 此题的争议点只可能是runmain或mainrun 因为Example的run方法里面休眠了100ms,在当今电脑计算性能过剩的时代,如果是多线程启动,main方法肯定会打印出了main。 为啥是runmain而不是mainrun呢? 因为启动线程是调用start方法。 把线程的run方法当普通方法,就直接用实例.run()执行就好了。 没有看到start。所以是普通方法调用。 所以选A。
发表于 2020-06-24 11:08:05 回复(0)
sleep只是让该进程暂停,不会释放资源 等待时间一过继续运行,在这里 下面的调用方法不论是start 启动线程还是直接调用run方法 结果都一样
发表于 2019-12-04 21:11:20 回复(1)
答案:A
注意是直接调用的run方法,不是线程的start
发表于 2019-06-11 10:36:34 回复(0)
习惯性的以为是继承Thread类重写run,在调用start方法🤣
发表于 2019-06-01 19:34:20 回复(0)