2011-12-03 77 views
2

可能重複:
java thread - run() and start() methods爲什麼我們需要調用thread.start()而不是thread.run()?

我做了一個程序,其採用線程---

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); 
     } 
    } 
} 

現在的問題是THA t ...爲什麼我們使用「Thread」類並創建它的對象並在其構造函數中傳遞「MyThread」調用?我們不能通過創建它的對象並調用run方法來調用「MyThread」對象的run方法嗎?

(即MyThread newthread=new MyThread(); and then newthread.run();

什麼是創建胎面對象和傳遞MyThread的類在它的原因是什麼?

回答

10

MyThread一個線程。這是實現Runnable,並有一個名爲run方法的普通類。

如果調用run方法是直接將運行在當前線程的代碼,而不是在一個線程。


要開始創建一個新的替代Thread類一個新的線程,給它一個實現Runnable一個對象,然後調用線程對象的start方法。當線程啓動時,它會調用你的對象,你在run方法。

另一種啓動線程的方法是子類Thread並覆蓋其方法run。再次啓動它,你必須實例化它,並調用start方法,而不是run方法。原因是相同的:如果直接調用run它將在當前線程中運行該方法。

有關Java開始新線程的詳細信息,請參閱Defining and Starting a Thread

+0

- 和幫助如何? –

+0

...爲什麼我要創建多個線程,而不是隻是我線程即主線程我想知道的是什麼? –

+0

@IamA你說,Java並不需要創建多個線程的能力嗎? –

0

起動() - >

使該線程開始執行; Java虛擬機調用 這個線程的運行方法。 從http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html

對於我來說,唯一的JVM知道什麼時候給你的程序線程的一些內存。 因此,我們有一個非標準使用這樣的事情:

new Thread().start(); 
+0

@ shorek-thanks .. –

相關問題