我制作了一个使用线程---
的程序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类的原因是什么?
答案 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();