-4

私は問題を抱えています、私がそのようなコードを持っているとしましょう:

public static void main(String[] args)
{
startMethod1();
startMethod2();
}

ここで、startMethod1メソッドが非常に大きく、実行に時間がかかる場合、startMethod1が終了する前にstartMethod2が開始されます。それらのメソッドを1つずつ実行させる方法は?

4

4 に答える 4

10

startMethod2は、startMethod1が終了する前に開始されます。

これは決して起こりません。startMethod1開始として実行されている可能性のあるスレッドを開始できstartmethod2ます。呼び出しない限り、startMethod2前に開始することはできませんstartMethod1startMethod1startMethod2

startmethod1のスレッドが終了するまで待ちたい場合は、スレッドをThread.join()使用するか、を使用する必要があります。ExecutorService.awaitTermination()

それらのメソッドを1つずつ実行させる方法は?

あなたがコードを書いたのと同じように。

于 2012-07-17T14:15:19.873 に答える
3

彼らはすでにそうしています。あなたがそれを書いた方法は、実行startMethod2されるまで開始されませんstartMethod1

于 2012-07-17T14:15:34.590 に答える
1

スレッドを使用している場合は、コード例を変更してください...しかし、別の質問へのコメントがあなたが意図していることを示していたので、私はあなたが変更したふりをします;-)

wait()とnotify()を見てください。

wait()を呼び出して現在のスレッドに一時停止を指示し、notify()を呼び出して再度ウェイクアップします

于 2012-07-17T14:15:05.473 に答える
0

私の推測では、バッファリングしているある種のメッセージロギングAPIを使用しているため、一部の出力が予想よりもはるかに遅く表示されます。おそらく、プログラムが終了するまでフラッシュすらしません。したがって、誤解を招くようなインターリーブ出力が発生します。

于 2012-07-17T14:18:52.230 に答える