このシナリオがあるとしましょう:
class Stack{
public void main{
ChildThread1 t1 = new ChildThread1;
ChildThread1 t2 = new ChildThread1;
ChildThread1 t3 = new ChildThread1;
//then we make some ChildThread2 objects and some ChildThread3 objects
ChildThread2 s1 = new ChildThread2;
//...
ChildThread3 v1 = new ChildThread3;
//...
//now we let all threads start in mix order
t1.start();
v1.start();
//...
SOP("All threads are ready");
//then we let them run with join()
t1.join();
t2.join();
t3.join();
s1.join();
//...
v1.join();
//...
スレッドの各タイプは、実行時に独自のステートメントを出力します。
プログラムを実行するたびに、出力が常に異なることに気付きました。たとえば、ChilThread1 t1 からのステートメントは、最初ではなく出力の途中で出力されるか (t1 が最初に開始されるため)、スレッド実行の途中でステートメント「すべてのスレッドが準備完了」がポップされます (例: ChildThread2 は「すべてのスレッドが準備完了です」 ' ランニング )
だから私は答えを見つけようとしましたが、このサイトを見つけました: http://www.avajava.com/tutorials/lessons/how-do-i-use-threads-join-method.html サイトは基本的に保証された順序はないと言っていますstart() を使用した場合の実行の
この奇妙な印刷順序は、 start() が実行順序を保証しないためだと思いますか? この理由は「すべてのスレッドの準備ができている」問題にも当てはまりますか?