-1

このコードがエラーをスローする理由を知りたいだけです。エラーは次のとおりです。

「スレッド "Thread-1" java.lang.Error での例外」

class Salmon extends Thread
{
    public static long id;
    public void run()
    {
        for(int i = 0;i<4; i++){
            if(i==2&& id ==Thread.currentThread().getId()){
            //if(i==2){
                new Thread(new Salmon()).start();
                throw new Error();
             }
             System.out.println(i + " ");
          }
     }
     public static void main(String[] args)
     {
         Thread t1 = new Salmon();
          id = t1.getId();
          t1.start();
      }
}
4

3 に答える 3

7

あなたがそれを言うので。

 if(i==2){
          new Thread(new Salmon()).start();
          throw new Error(); // <----
于 2012-07-24T17:17:00.947 に答える
3

あなたの質問は、「なぜ実行が を超えて続くnew Thread(new Salmon()).start();のか? 新しいスレッドを開始しています。 を呼び出すとstart()、新しいスレッドでのrun()メソッドの実行は、すぐに戻るメソッドの後の継続的な実行と並行して続行されます。start()

于 2012-07-24T17:20:00.127 に答える
1

id == Thread.currentThread().getId()メイン スレッドから開始する最初のスレッド (t1) では常に true です。

iそのスレッドで 2 に到達するとすぐに、if(i == 2 && id == Thread.currentThread().getId())同様に true になり、次のコードが実行されます。

new Thread(new Salmon()).start();
throw new Error();

すでに指摘したように、new Thread(new Salmon()).start();すぐに戻り (新しく作成されたスレッドが t1 と並行して実行されます)、t1 は例外をスローする次の行に進みます。

于 2012-07-24T17:34:32.720 に答える