java - 为什么我们需要调用 thread.start() 而不是 thread.run()?

标签 java

<分区>

Possible Duplicate:
java thread - run() and start() methods

我制作了一个使用线程的程序---

public class ThreadTest{    
    public static void main(String[] args){     
        MyThread newthread=new MyThread();
        Thread t=new Thread(newthread);
        t.start();
        for(int x=0;x<10; x++){
            System.out.println("Main"+x)
        }
    }
} 

class MyThread implements Runnable{
    public void run(){
        for(int x=0; x<10; x++){
            System.out.println("Thread"+x);
        }
    }
}

现在我的问题是......为什么我们使用“Thread”类并创建它的对象并在它的构造函数中传递“MyThread”调用?我们不能通过创建它的对象并调用 run 方法来调用“MyThread”对象的 run 方法吗?

(即 MyThread newthread=new MyThread(); 然后是 newthread.run(); )

创建踏板对象并在其中传递 MyThread 类的原因是什么?

最佳答案

MyThread不是线程。它是一个普通类,实现了 Runnable 并有一个名为 run 的方法。

如果您直接调用run 方法,它将在当前 线程上运行代码,而不是在 线程上运行代码。


要启动一个新线程,您需要创建一个新的而不是 Thread 类,给它一个实现了 Runnable 的对象,然后调用 start线程对象上的方法。当线程启动时,它会为您调用对象上的 run 方法。

启动线程的另一种方法是继承Thread 并覆盖其run 方法。再次启动它,你必须实例化它并调用 start 方法,而不是 run 方法。原因是一样的:如果你调用 run它将直接在当前线程中运行该方法。

参见 Defining and Starting a Thread有关在 Java 中启动新线程的更多信息。

关于java - 为什么我们需要调用 thread.start() 而不是 thread.run()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369734/

相关文章:

java - 在按钮上方的地方?这叫什么?

java - 我如何告诉我的数据库某些更改是由 hibernate 而不是其他应用程序进行的?

扩展参数类/接口(interface)的java基类

java - 无法将文本从单独的类追加到 JTextArea - Java

java - 从 oracle 过程调用 java 时出现 ClassNotFoundException

java - 如何使用 Java 流根据双嵌套列表中的属性过滤集合

具有嵌套字符串或 ArrayList 的 Java HashMap

java - 对象作为数组

java - 如何更改 android.R.layout.simple_list_item_1 的文本颜色?

java - List<String> 自定义 gwt 数据显示