JAvaマルチスレッド-簡単なチケット販売プログラム


需要:簡単な切符販売プログラム.
複数の窓口で切符を売る
第1種
staticの定義(ライフサイクルが長すぎる)
スレッドを作成する第2の方法.Runableインタフェースの実装
1.クラス実装Runnableインタフェースの定義
2.Runnableインタフェースのrunメソッドを上書きする
スレッドを実行するコードをrunメソッドに格納
3.Threadクラスでスレッドオブジェクトを作成します.
4.Runnableインタフェースのサブクラスオブジェクトを実際のパラメータとしてThreadのコンストラクタに渡す
なぜrunnableインタフェースのサブクラスオブジェクトをThreadコンストラクション関数に渡すのか
なぜなら,カスタムrunメソッドが属するオブジェクトはRunnableインタフェースのサブクラスオブジェクトであるからである.
したがって、スレッドにオブジェクトのrunメソッドを指定させます.runメソッドが属するオブジェクトを明確にする必要があります
5.Threadクラスを呼び出すstartメソッドスレッドを開きrunnableインタフェースサブクラスを呼び出すrunメソッド
Runnable
実現方式と継承方式の違いは何ですか?
実現方式のメリット;単一継承の限界を回避
スレッドを定義するとき.インプリメンテーションの使用を推奨
2つの方法の違い:
Threadスレッドコードを継承してThreadサブクラスrunメソッドに格納
Runnableを実現します.スレッドコードには、インタフェースサブクラスのrunメソッドが存在します.
/*
  :       。
      
   
  static(      )
          。  Runable  
1.     Runnable  
2.  Runnable    run  
                 run   
3.  Thread       。
4. Runnable                Thread     
         runnable          Thread    
      ,    run       Runnable       
                run  。      run       
5.  Thread  start         runnable     run  
Runnable
               ?
      ;          
      。        
       :
  Thread      Thread  run   
  Runnable。           run  。
*/
class Ticket implements Runnable//extends Thread
{
    private int tick = 100;
    public void run()
    {
        while(true)
        {
            if(tick>0){
                System.out.println(Thread.currentThread().getName()+"sale:"+tick--);
            }
        }
    }
}
class Test_11_07
{
    public static void main(String[] args)
    {
        System.out.println("Hello Wolrd");
        Ticket t = new Ticket();
          
        Thread t1 = new Thread(t);//       ;
        Thread t2 = new Thread(t);//       ;
        Thread t3 = new Thread(t);//       ;
        Thread t4 = new Thread(t);//       ;
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        /*
        Ticket t1 = new Ticket();
        Ticket t2 = new Ticket();
        Ticket t3 = new Ticket();
        Ticket t4 = new Ticket();
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        */
    }
}