-1
以下に示すコードスニペットは、2つの異なる実行時に異なる出力を示します。最初の場合は「出力1」を、2番目の場合は「出力2」を与えます。スレッドスケジューラがスレッドを選択してからrun()
メソッドを完了しないと、m2
スレッドをどのように起動できるのか分かりません。誰も私にここに正確に何が起こっているか説明することはできますか?なぜ、「出力1」と「出力2」を別の時間に取得するのですか?私は "出力1"は正しい出力だと思います。スレッドスケジューラがスレッドを選択する
class TestMultiPriority1 extends Thread
{
public void run()
{
System.out.println("running thread name is:"+Thread.currentThread().getName());
System.out.println("running thread priority is:"+Thread.currentThread().getPriority());
}
public static void main(String args[])
{
TestMultiPriority1 m1=new TestMultiPriority1();
TestMultiPriority1 m2=new TestMultiPriority1();
m1.setPriority(Thread.MIN_PRIORITY);
m2.setPriority(Thread.MAX_PRIORITY);
m1.start();
m2.start();
}
}
出力1:
running thread name is:Thread-0
running thread priority is:1
running thread name is:Thread-1
running thread priority is:10
出力2:
running thread name is:Thread-0
running thread name is:Thread-1
running thread priority is:1
running thread priority is:10
正しいことは、正しいものを定義するのが開発者としての仕事だということです。私たちは、何かが正しいことを「考える」ことはしません。事前に正しいことが分かっており、プログラムがそのように動作することを確認します。このような制約を[同期、ロックまたはその他のメカニズム](https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html)で定義する必要があるマルチスレッドの場合、これは特に重要です。これらの制約なしで並列に2つのスレッドを開始するだけの場合は、相対的なタイミングについて何も仮定することはできません。優先順位を設定してもそれは変わりません。 – biziclop