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

时间:2011-12-03 18:04:04

标签: java

  

可能重复:
  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(); and then newthread.run();

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

2 个答案:

答案 0 :(得分:10)

MyThread一个帖子。它是一个实现Runnable的普通类,并且有一个名为run的方法。

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


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

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

有关使用Java启动新线程的更多信息,请参阅Defining and Starting a Thread

答案 1 :(得分:0)

start() - &gt;

  

使该线程开始执行; Java虚拟机调用   这个线程的run方法。   来自http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html

对我来说,只有JVM知道什么时候给你的程序一些内存去线程。 所以我们有一个标准可以使用这样的东西:

new Thread().start();