2011-12-03 14 views
2

可能性の重複:
java thread - run() and start() methodsthread.run()の代わりにthread.start()を呼び出す必要があるのはなぜですか?

私は今、私の質問はTHAである

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

---スレッド使用するプログラムを作っt ...なぜ「スレッド」クラスを使用してオブジェクトを作成し、そのコンストラクタに「MyThread」コールを渡すのですか? 「MyThread」オブジェクトのrunメソッドを、オブジェクトを作成してrunメソッドを呼び出して呼び出すことはできませんか?

(すなわちMyThread newthread=new MyThread(); and then newthread.run();

トレッドオブジェクトを作成し、それにMyThreadクラスを渡すための理由は何ですか?

答えて

10

MyThreadクラスは、ではなく、スレッドです。 Runnableを実装する通常のクラスで、runというメソッドがあります。

あなたが直接runメソッドを呼び出した場合には、現在スレッドで、ない新しいスレッド上でコードを実行します。


があなたの代わりに Threadクラスの新しいを作成新しいスレッドを開始するには、それを Runnableを実装するオブジェクトを与え、その後、スレッドオブジェクトの startメソッドを呼び出します。スレッドが起動すると、オブジェクトの runメソッドが呼び出されます。

スレッドを開始する別の方法は、Threadをサブクラス化し、そのrunメソッドをオーバーライドすることです。もう一度開始するには、runメソッドではなくstartメソッドを呼び出す必要があります。理由は同じです。runを直接呼び出すと、現在のスレッドでメソッドが実行されます。

Javaで新しいスレッドを開始する方法の詳細は、Defining and Starting a Threadを参照してください。

+0

- それはどのように役立ちますか? –

+0

私が知りたいことは...なぜ私はスレッド、すなわちメインスレッドではなく複数のスレッドを作成したいのですか? –

+0

@IamAあなたはJavaに複数のスレッドを作成する必要はないと言っていますか? –

0

開始() - >

原因このスレッドが実行を開始します。 Java仮想マシンは このスレッドのrunメソッドを呼び出します。 私にとって

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.htmlから、スレッドにあなたのプログラムのいくつかのメモリを与えるときだけJVMが知っています。 このようなものを使用するためには、次のようなものを使用してください。

new Thread().start(); 
+0

@ shorek-thanks .. –

関連する問題