首页 > 试题广场 >

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

[单选题]
以下程序运行的结果为()
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
这个类虽然继承了Thread类,但是并没有真正创建一个线程。
创建一个线程需要覆盖Thread类的run方法,然后调用Thread类的start()方法启动
这里直接调用run()方法并没有创建线程,跟普通方法调用一样,是顺序执行的
编辑于 2015-01-31 10:18:59 回复(19)
public class TestThread_multi 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){
    	/**
    	 * 两种方式不同,newThread的话会使两个线程进行;
    	 * 如果同一个对象中,只是进行了子函数的执行,在同一个线程中,顺序不会有交叉
    	 */
    	//1:run main
    	TestThread_multi ex=new TestThread_multi();
    	ex.run();
    	//2:main run
            new Thread(
            		new Runnable(){
            			public void run(){
            			       try{
            			            Thread.sleep(10000);
            			            }catch (InterruptedException e){
            			            e.printStackTrace();
            			            }
            			            System.out.print("run");
            			    }
            		}
            		).start();
            System.out.print("main");
    }
}
这个例子,已经注解了情况
编辑于 2015-07-17 22:09:49 回复(3)
public class ExampleForThread extends Thread {

	@Override
	public void run() {
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("run");
	}

	public static void main(String[] args) {
		ExampleForThread ex = new ExampleForThread();
		ex.start();
		System.out.println("main");
	}
}

若执行start()方法,则运行的结果为:main run.
发表于 2016-09-23 09:59:04 回复(3)
Java实现多线程有两种方式,第一是实现Thread类。步骤:

1 继承Thread  类  
2 重写run方法
3 创建多个实例(即线程)
4 启动  调用start方法

补充:run()只是一个普通的方法,没有启动线程的作用,重写这个方法的原因run()方法用来包含那些被线程执行的代码,一般来说被线程执行的代码都是比较耗时的,start():首先启动线程,然后再由jmv去调用该线程的run()方法,同一个线程不能被调用多次

B:实现Runnable接口
实现步骤:
a 创建一个新类并实现Runnable接口
b 重写run()方法
c 创建新类的一个实例
d 创建多个Thread实例,其参数为c中创建的实例对象
e 启动线程
补充:为什么要有这个方法来实现多线程:
1因为如果一个类已经有了一个父类,那么该类就不可能在继承Thread的类,而接口可以继承多个。
2 这个接口定义的成员属性是共享的(相当于static修饰)
发表于 2016-08-19 15:53:40 回复(1)
话说哪来的空格  
发表于 2015-08-19 17:13:17 回复(2)
java线程使用run(),跟正常的调用一样使用
发表于 2015-09-22 10:40:39 回复(0)
没人考虑如何sleep(1000)抛出异常还会打印异常信息么?
发表于 2016-04-05 02:58:17 回复(1)
直接调用的run,不算使用多线程
发表于 2019-10-02 20:17:34 回复(0)
看清楚了,调用的是run方法 按顺序执行
发表于 2019-09-01 16:20:17 回复(0)
start才能创建新的线程。
发表于 2018-05-11 08:10:56 回复(0)
我不理解的是 从try进去哪里错了 为什么要进catch里面
发表于 2018-04-27 00:31:03 回复(1)
哈哈,套路了
发表于 2018-01-14 22:18:10 回复(1)
启动线程必须通过调用start()方法,将第13行代码改成example.start(),得出的结果即为main run。
发表于 2017-08-22 22:58:43 回复(0)
这里只是调用run()方法,并不是start了一个线程,所以运行流程是在主线程中运行run()方法后主线程睡一秒后输出  "run",然后继续执行输出语句输出  “main” ,   结果就是    “runmain”
发表于 2017-07-06 11:56:35 回复(0)
调用run方法并不会启动子线程,而是直接当作普通函数调用,因此在执行run的时候,遇到Thread.sleep(1000)导致的是main线程休眠1s,因此效果是运行后,在1s后控制台输出“runmain"
发表于 2016-07-14 21:12:12 回复(0)
请问Thread.sleep()到底是让谁休眠啊
发表于 2017-08-16 15:02:40 回复(12)
1. 分析代码: - 在 main 方法中,创建了 Example 类的实例 example ,然后直接调用了 example.run() 方法。这并不是启动一个新线程来执行 run 方法,而是在当前主线程中顺序执行 run 方法中的代码。 - 当执行 example.run() 时,线程会睡眠1000毫秒(1秒),然后输出 run 。 - 接着,在 run 方法执行完后,主线程继续执行 System.out.print("main"); ,输出 main 。 2. 确定结果: - 所以最终的输出结果是 runmain 。 答案是A。
发表于 2024-11-13 14:14:35 回复(0)
如果加上start,那就先输出main延迟1秒输出main
发表于 2019-10-17 20:46:07 回复(0)

直接调用run并没有创建线程

编辑于 2019-09-23 15:04:13 回复(0)
没使用start()开启这个线程
发表于 2019-09-20 16:51:44 回复(0)
这里又差点骗过我们。example.run();这一句没有开启新线程,是顺序执行的,相当于main线程先sleep了1s,然后输出了"run",再输出"main"
发表于 2019-09-11 15:34:23 回复(0)