java作成スレッドの2つの方法の違い


Javaでスレッドを作成する方法は二つあります。Threadクラスを継承し、Runnableインターフェースを実現します。
二つの例を通して、両者の違いを分析します。
1)Thread類の継承

public class TestThread extends Thread {
  int count = 3;

  public TestThread(String ThreadName) {
    super(ThreadName);
  }

  @Override
  public void run() {
    for (int i = 0; i < 10; i++)
      if (count > 0) {
        System.out.println(Thread.currentThread().getName() + "--->" + count);
        count--;
      }
  }

  public static void main(String[] args) {
    //new       
    new TestThread("   ").start();
    new TestThread("   ").start();
    new TestThread("   ").start();
  }
}

出力結果:
スレッド一-->3
スレッド一-->2
スレッド一-->1
スレッド二-->3
スレッド二-->2
スレッド二-->1
スレッド三-->3
スレッド三-->2
スレッド三-->1
2)Runnableインターフェースを実現する
同様に、Threadのコードを継承します。

public class TestThread implements Runnable {
  int count = 3;

  public TestThread() {
  }

  @Override
  public void run() {
    for (int i = 0; i < 10; i++)
      if (count > 0) {
        System.out.println(Thread.currentThread().getName() + "--->" + count);
        count--;
      }
  }

  public static void main(String[] args) {
    TestThread tr = new TestThread();
    //new          Runnable
    new Thread(tr, "   ").start();
    new Thread(tr, "   ").start();
    new Thread(tr, "   ").start();
  }
}

出力結果:
スレッド一-->3
スレッド一-->2
スレッド一-->1 
二つの新しいスレッドの方式の最後の出力結果が違っていることがわかったのは、Threadクラスを継承しながら3つのスレッドを作成し、各スレッドがそれぞれ1つのタスクを実行し、3つのスレッドがそれぞれ3回のループ印刷logに相当するためである。第二の実装のRunnableインターフェースでは、3つのThreadを作成して一緒にtrというRunnableを実行します。3つのThreadに相当して、このサイクルを共同で実行します。最後のcountは一回だけ循環させました。残りのスレッド2とスレッド3は同じcountを使用していますので、印刷できませんでした。
結論:
1)2つのスレッドを作成する方式は違っています。一つは、インターフェースを実現することによって、Javaで他の親クラスが継承されている場合、インターフェースを実行してスレッドを作成するしかないです。
2)上記の例では、Threadを継承し、スレッドごとに1つのオブジェクトを独立して持ち、Runnableオブジェクトを実現し、複数のスレッドが1つのRunnableを共有する例が見られます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。