当前位置: 首页 > 面试题库 >

请解释Thread run()和start()方法的输出

秦权
2023-03-14
问题内容

请解释以下代码的输出:

如果我致电th1.run(),输出为:

EXTENDS RUN>>
RUNNABLE RUN>>

如果我致电th1.start(),输出为:

RUNNABLE RUN>>
EXTENDS RUN>>

为什么会有这种不一致?请解释。

class ThreadExample extends Thread{
    public void run() {
        System.out.println("EXTENDS RUN>>");
    }
}

class ThreadExampleRunnable implements Runnable {
    public void run() {
        System.out.println("RUNNABLE RUN>>");
    }
}

class ThreadExampleMain{
    public static void main(String[] args) {
        ThreadExample th1 = new ThreadExample();
        //th1.start(); 
        th1.run();

        ThreadExampleRunnable th2 = new ThreadExampleRunnable();
        th2.run();
    }
}

问题答案:

Thread.start()方法启动一个新线程,该线程的入口点就是run()方法。如果直接调用run(),它将在同一线程中执行。假设调用Thread.start()将启动一个新的执行线程,则该run()方法可在其余主方法执行之后(如您的示例)被调用。

将您的main方法更改为调用th1.start()并重复运行,您会发现有时它会输出:

EXTENDS RUN>>
RUNNABLE RUN >>

有时它输出:

RUNNABLE RUN >>
EXTENDS RUN>>

取决于Java选择如何安排2个线程。

查看有关此内容的Java教程。



 类似资料:
  • 这是代码。 输出是''

  • 本文向大家介绍请解释hashCode()和equals()方法有什么联系?相关面试题,主要包含被问及请解释hashCode()和equals()方法有什么联系?时的应答技巧和注意事项,需要的朋友参考一下 考点:基础 Java对象的eqauls方法和hashCode方法是这样规定的: ➀相等(相同)的对象必须具有相等的哈希码(或者散列码)。 ➁如果两个对象的hashCode相同,它们并不一定相同。

  • 根据我,3个新的对象将创建。一个转到字符串池,两个匿名对象将由new运算符创建。但我不确定。 如果我错了,请解释。

  • 本文向大家介绍以下方法调用call输出的结果是什么?请解释下?相关面试题,主要包含被问及以下方法调用call输出的结果是什么?请解释下?时的应答技巧和注意事项,需要的朋友参考一下 结果:{ 0: 1, 3: 1, length: 5 } 首先类数组转换为数组 [undefined, undefined, undefined, 1, undefined] 然后进行 copyWithin(0, 3)

  • 有人能解释一下last()和takeLast()方法的区别吗?正如文件所述: last()-将完成信号之前观察到的最后一个元素作为单声道发出,或者如果源为空,则发出NosTouchElementException错误。对于被动版本,请使用takeLast(int) TakeLast()-在此Flux完成之前发出最后N个值。 对我来说是一样的。我不能理解的差异。有人能给我举个简单的例子吗?提前感谢

  • 本文向大家介绍Java线程中start和run方法全面解析,包括了Java线程中start和run方法全面解析的使用技巧和注意事项,需要的朋友参考一下 自定义线程两种方法 自定义一个runnable接口的实现类,然后构造一个thread,即对thread传入一个runnable接口类。 new一个thread或者写个thread子类,覆盖它的run方法。(new 一个thread并覆盖run方法实