这可能是一个基本问题,我对此感到困惑,
在一个文件中,我是这样的:
public class MyThread extends Thread {
@Override
public void run() {
//stuffs
}
}
现在在另一个文件中我有这个:
public class Test {
public static void main(String[] args) {
Thread obj = new MyThread();
//now cases where i got confused
//case 1
obj.start(); //it makes the run() method run
//case 2
obj.run(); //it is also making run() method run
}
}
所以在上面两种情况之间有什么区别,情况1是否正在创建新线程,情况2是否未创建线程?那是我的猜测…希望大家能更好地回答。谢谢
start()
run()
在新线程中运行代码。run()
直接调用不会run()
在新线程中执行,而是run()
从中调用该线程。
如果run()
直接调用,则没有线程。run()
直接调用将阻塞,直到run()
完成任何代码。
start()
创建一个新线程,并且由于其中的代码run
正在该新线程中运行,因此start()
将立即返回。(嗯,从技术上讲,不是立即开始,而是在完成之后创建新线程并将其启动。)
另外,您应该实现可运行的,而不是扩展thread。
本文向大家介绍线程的 run() 和 start() 有什么区别?相关面试题,主要包含被问及线程的 run() 和 start() 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。run() 可以重复调用,而 start() 只能调用一次。
每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,run()方法称为线程体。通过调用Thread类的start()方法来启动一个线程。 start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。run() 可以重复调用,而 start() 只能调用一次。 start()方法来启动一个线程,真正实现了多线程运行。调用start()方法无需等待run方法体
问题内容: 假设我们有以下两个Runnable: 那么这有什么区别: 和这个: 问题答案: 第一个示例:没有多个线程。两者都在单个(现有)线程中执行。没有线程创建。 只是实现接口并因此实现run()方法的类的两个不同对象。调用时,你正在当前线程中执行它。 第二个示例:两个单独的线程。 t1并且t2是该类的对象。当你调用时,它将启动一个新线程并在内部调用该run()方法r1以在该新线程中执行该方法。
问题内容: 假设我们有以下两个Runnable: 那么这有什么区别: 还有这个: 问题答案: 第一个示例:没有多个线程。两者都在单个(现有)线程中执行。没有线程创建。 和只是实现接口并因此实现方法的类的两个不同对象。调用时,你正在当前线程中执行它。 第二个示例:两个单独的线程。 并且是该类的对象。当你调用时,它将启动一个新线程并在内部调用该方法r1以在该新线程中执行该方法。
一个常见的问题:为什么启动线程是调用start()方法,而不是调用run()方法呢? 答案: 每个线程都在单独的调用堆栈中启动。 从主线程调用run()方法,run()方法转到当前调用堆栈,而不是新调用堆栈的开头。 如下面例子所示: 输出结果为: 以上程序Demo的run()线程方法和Demo的main()方法都是处于主线程中,换句话说,这里并没有创建新的线程。 如果直接调用run()方法,则会出
本文向大家介绍Thread 类中的start() 和 run() 方法有什么区别?相关面试题,主要包含被问及Thread 类中的start() 和 run() 方法有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 start()方法可以用来启动线程,调用该方法,会创建一个新的线程,然后内部执行run()方法;不能多次调用,否则会抛异常 直接调用run()方法,不会创建新的线程;可以进行多次调