Javaでthreadクラスを継承することとRunnableインタフェースを実現することの違い

3206 ワード

Javaでのスレッドの作成には、次の2つの方法があります.
1.Threadクラスを継承することにより、Threadのrun()メソッドを書き換え、スレッド実行の論理をそこに置く
2.Runnableインタフェースを実現することにより、Threadクラスをインスタンス化する
      ,         ,        ,               。                       ,  Thread    Runnable  ,                 。

Javaコードpackage com.threadtest; class MyThread extends Thread{
private int ticket = 10;  
private String name;  
public MyThread(String name){  
    this.name =name;  
}  
  
public void run(){  
    for(int i =0;i<500;i++){  
        if(this.ticket>0){  
            System.out.println(this.name+"  ---->"+(this.ticket--));  
        }  
    }  
}  

} public class ThreadDemo {
public static void main(String[] args) {  
    MyThread mt1= new MyThread("    ");  
    MyThread mt2= new MyThread("    ");  
    MyThread mt3= new MyThread("    ");  
    mt1.start();  
    mt2.start();  
    mt3.start();  
}  

}
実行結果は次のとおりです.
Javaコード1番窓口売票---->10番窓口売票---->9番窓口売票---->10番窓口売票---->8番窓口売票---->7番窓口売票---->6番窓口売票---->10番窓口売票---->5番窓口売票---->4番窓口売票---->3番窓口売票---->2番窓口売票---->1 2番窓口売票---->9番窓口口売り切符---->8番窓口切符---->9番窓口切符---->8番窓口切符---->7番窓口切符---->6番窓口切符---->5番窓口切符---->4番窓口切符---->3番窓口切符---->2三番窓口切符---->1二番窓口切符---->7番窓口切符---->6二番窓口切符---->5二番窓口切符---->4二番窓口切符---->4窓口売り---->3番窓口売り---->2番窓口売り---->1
Runnableインタフェースを実装するコードは次のとおりです.
Javaコードpackage com.threadtest; class MyThread 1 implements Runnable{private int ticket=10;private String name;public void run(){for(int i=0;i<500;i+){if(this.ticket>0){System.out.println(Thread.currentThread().getName()+「切符を売る----」+(this.ticket-)}}public class RunnableDemo {
public static void main(String[] args) {  
    // TODO Auto-generated method stub  
    //        
     MyThread1 mt = new MyThread1();  
     Thread t1 = new Thread(mt,"    ");  
     Thread t2 = new Thread(mt,"    ");  
     Thread t3 = new Thread(mt,"    ");  

//MyThread1 mt2 = new MyThread1();//MyThread1 mt3 = new MyThread1(); t1.start(); t2.start(); t3.start(); }
}
実行結果は次のとおりです.
Javaコード1番窓口売票------10 3番窓口売票------9 3番窓口売票------7 3番窓口売票------5番窓口売票------4 3番窓口売票------3番窓口売票------2 3番窓口売票------1番窓口売票------8 2番窓口売票------6
           。        ,      ,

Threadクラスを継承するのは、3つのこと、すなわち3つの切符を売る10枚のタスクをそれぞれ3つのウィンドウに分け、彼らがそれぞれのことをしてそれぞれの切符を売ってそれぞれのタスクを完成することに相当する.MyThreadはThreadクラスを継承するため、new MyThreadの時に3つのオブジェクトを作成すると同時に3つのスレッドを作成した.
Runnableを実現したのは、10枚のチケットを売って3人に共同で完成させることに相当し、new MyThreadは1つのタスクを作成し、3つのThreadをインスタンス化し、3つのスレッドを作成し、3つのウィンドウを手配して実行することに相当する.
以下を図で示す.
私たちが接触したばかりのとき、Threadクラスを継承したり、Runnableインタフェースを実装したりしてマルチスレッドを実装することに迷うかもしれませんが、実際には接触後、これは完全に2つの異なる実装マルチスレッドであり、1つは複数のスレッドがそれぞれ自分のタスクを完了し、1つは複数のスレッドが共同で1つのタスクを完了することです.
                      Thread          ,       Runnable     ,    。

  

      ,       run()   ,       Thread   ,      Runnable   。    ,                    ,       (Thread)    。

転載するhttps://www.cnblogs.com/felixzh/p/5985832.html