Runnable インターフェイスを使用してスレッドを使用する方法を示すコードがいくつかあります。どこかの Web サイトのコードから始めて、自分の好みに合わせて変更しました。それは動作しますが、私はその一部を理解していません。求めていることの本質までコードを削除しようとしましたが、取りすぎた可能性があります。私が NetBeans に持っているコードは機能するので、間違ったものを取り除いて台無しにしない限り、これは機能するコードです。しかし、私の質問をさせてください、そしてそれが関係なく答えられるかどうか見てみましょう:私が理解できない部分はこの部分です:
public String toString()
{
return "Thread " + Thread.currentThread().getName() + ": " + countDown;
}
長い間、これは、実行時に現在のスレッドの名前と同じ名前に動的に設定されるメンバー変数のように見えました。しかし、Java では変数に動的に名前を付けることができないということも複数の場所で読んだので、それは私が見ているものではないと思います。次に、何かがオーバーライドされているため、NetBeans がこのコードセクションの直前に @Override を配置することを望んでいることに気付きました。しかし、何がオーバーライドされているのか正確にはわかりません。親クラスのコンストラクターをオーバーライドしていますか? もしそうなら、どのクラスですか?
とにかく、ここにコードがあります:
package countdown;
public class Counter implements Runnable
{
private int countDown = 5;
public String toString()
{
return "Thread " + Thread.currentThread().getName() + ": " + countDown;
}
public void run()
{
while(true) {
System.out.println(this);
if(--countDown == 0)
{
return;
}
}
}
}
package countdown;
public class Main
{
public static void main(String[] args)
{
for(int i = 1; i <= 5; i++)
new Thread(new Counter(), "" + i).start();
}
}