私は問題を抱えています、私がそのようなコードを持っているとしましょう:
public static void main(String[] args)
{
startMethod1();
startMethod2();
}
ここで、startMethod1メソッドが非常に大きく、実行に時間がかかる場合、startMethod1が終了する前にstartMethod2が開始されます。それらのメソッドを1つずつ実行させる方法は?
startMethod2は、startMethod1が終了する前に開始されます。
これは決して起こりません。startMethod1
開始として実行されている可能性のあるスレッドを開始できstartmethod2
ます。呼び出しない限り、startMethod2
前に開始することはできませんstartMethod1
startMethod1
startMethod2
startmethod1のスレッドが終了するまで待ちたい場合は、スレッドをThread.join()
使用するか、を使用する必要があります。ExecutorService.awaitTermination()
それらのメソッドを1つずつ実行させる方法は?
あなたがコードを書いたのと同じように。
彼らはすでにそうしています。あなたがそれを書いた方法は、実行startMethod2
されるまで開始されませんstartMethod1
。
スレッドを使用している場合は、コード例を変更してください...しかし、別の質問へのコメントがあなたが意図していることを示していたので、私はあなたが変更したふりをします;-)
wait()とnotify()を見てください。
wait()を呼び出して現在のスレッドに一時停止を指示し、notify()を呼び出して再度ウェイクアップします
私の推測では、バッファリングしているある種のメッセージロギングAPIを使用しているため、一部の出力が予想よりもはるかに遅く表示されます。おそらく、プログラムが終了するまでフラッシュすらしません。したがって、誤解を招くようなインターリーブ出力が発生します。