子スレッドを中断するプログラムを作成しようとしています。"main method" printlnが最初に印刷されている理由
なぜSystem.out.println("main method")
が最初に印刷されてからt.run()
が実行されるのですか?
import java.util.*;
import java.lang.*;
import java.io.*;
class TryCatchReturn extends Thread
{
public void run()
{
for(int i=0;i<5;i++)
{
try
{
System.out.println("i will get interrupted");
}
catch (Exception e)
{
System.out.println("catch interruputed");
}
}
}
}
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
TryCatchReturn t=new TryCatchReturn();
t.start();
t.interrupt();
System.out.println("main method");
}
}
'start'を呼び出すと2つの並行スレッドが共存するため、メインと新しいスレッドを実行する*古いプレーン*があります。メインスレッドが最初に実行しているようです。 –
正しい答えはおそらく「だから」です。注文スレッドが実行されるという保証はありません。 't.interrupt()'の後に 'Thread.sleep(1)'を追加すると、間にシステムコールがあるため実行順序を逆転させるでしょう。 – dhke
これは割り込みのみですか?なぜなら、スレッドのjoin()メソッドを使用して同じコードを書き込むと、最初の子メソッドが実行されてからメインスレッド – Swati