class NewThread1 extends Thread{
NewThread1(String name){
super(name); //this line replaced by 'new Thread(name);'
System.out.println("child Thread:"+this);
}
}
public class ThreadCreationExtend {
public static void main(String[] args) {
new NewThread1("Thread1");
new NewThread1("Thread2");
}
}
output:child Thread:Thread[Thread1,5,main]
child Thread:Thread[Thread2,5,main]
output after replacement:
child Thread:Thread[Thread-0,5,main]
child Thread:Thread[Thread-1,5,main]
スレッド(String name)を使用する代わりにThreadクラスのコンストラクタ、Thread(String name)出力は異なって来ています。異なる出力を説明してください。 デフォルトのスーパーコンストラクタのためですか?もしそうなら、どのようにスーパーコンストラクタThread(String name)をsuper()なしで使うのですか?あなたがnew Thread(String name)
代わりのsuper(name)
を呼び出す場合親コンストラクタを明示的に呼び出すときのjavaのsuper()動作
'new Thread(name)'は新しいスレッドオブジェクトを作成するだけです。スーパーコンストラクタを呼び出すためにsuper(...)を使用するのは、javaでそれを行う唯一の方法です(複数の継承を持たないため、問題はありません)。 – frenzykryger
一般的に、独自のスレッドクラスを作成するのは悪い習慣です。 'Runnable'を使うと、個々のスレッドの代わりにエグゼキュータで実行する方が普通です。 – chrylis
@chrylisあなたはexecuterが何を意味するのか説明できますか? –