2011-01-20 9 views
3

でマルチスレッド()はマルチスレッドジョブを実行し、終了する前にb.start()が実行されます。私のようなものでmainメソッドを持つJavaの

  1. どのようにしてa.start()を開始するメインスレッドは、終了する前にメソッドを終了しますか?
  2. a.start()が実行される前にb.start()が起動しないことを確認するにはどうすればよいですか?

ありがとうございました!

+1

のために行く、スレッドを直接使用しないでください。 Joinと同時Utilは、以下に指摘されているように最善の方法です。 –

答えて

13

あなたは全く別のスレッドでこれらのタスクを実行する必要はありませんように見えますが、あなたが本当にあなたにしたい場合は、このような何かを行うことができます:

A a = new A(); 
a.start(); 
a.join(); // Will wait until thread A is done 

B b = new B(); 
b.start(); 
b.join(); // Will wait until thread B is done 

AとBは、スレッドのサブクラスであると仮定すると、これはRunnableを実装し、新しいThread(Runnable).start()を使用することを推奨していません。

これを実行するより良い方法は、Executorを使用し、AとBにRunnable(スレッドを拡張しない)を実装させることです。このように:

ExecutorService ex = Executors.newSingleThreadExecutor(); 
ex.execute(new A()); 
ex.execute(new B()); 

AとBは別のスレッドで順次実行されます。

+0

+1は複数回投票したいと考えています。 ;) –

+0

ありがとう! テキストの長さが最小であるために何かを書く必要があります... – user431336

1

は、JVMが実行するために、あなたはそれを予測することはできませんどのスレッドが決定したので、それが来て、より高いレベルjava.util.concurrentライブラリ

+0

ポインタありがとうございます。私はこれをチェックします。 – user431336

関連する問題