2012-05-07 19 views
3

私のプログラムでスレッドを開始すると、他のスレッドはすべて停止します。スレッドが開始されるとJavaのメインコードが停止する

これは私のスレッドコードです...

static Thread b1 = new Thread(new Builders()); 
b1.run(); 
System.out.println("done"); 

は、これはクラスBuildersです。

public class Builders implements Runnable { 

    static boolean busy=false; 
    Random r = new Random(); 

    public void run() { 
     try{ 
      busy=true; 
      System.out.println("ready"); 
      Thread.sleep(9999); 
      busy=false; 
      System.out.println("done"); 
     } 
     catch(Exception e){ 
     } 
    } 
} 

プログラムを実行すると、スレッドが開始され、プログラムはスレッドの終了を待機します。スレッドの主なポイントは、コードが同時に実行できることだと思いました。誰かが私が間違っていることを理解するのを助けてくれますか?

答えて

8

これは、スレッドがrun()ではなくstart()で開始されているためです。これは現在のスレッドでrunメソッドを呼び出すだけです。だから、次のようになります。

static Thread b1 = new Thread(new Builders()); 
b1.start(); 
System.out.println("done"); 
+0

あなたの助けをありがとう – backman

+0

@backman:あなたの問題を解決する答えを受け入れることを忘れないでください。それはSOの重要な部分です。 – Tudor

2

あなたがスレッドを開始していないためです - 代わりに、あなたは同期run()を呼び出すことにより、スレッドのコードを実行しています。代わりにstart()に電話する必要があります。

さらに、executorsを使用してください。

1

start()メソッドに電話する必要があります。 Threadの内部コードは、run()メソッドを呼び出す新しいオペレーティングシステムスレッドを開始します。自分でrun()を呼び出すと、スレッド割り当てコードがスキップされ、現在のスレッドで実行されます。

関連する問題