把困難踩在腳下

          迎難而上

           

          java實現多線程兩種方法的比較

          先看一下java線程運行時各個階段的運行狀態


          java實現多線程有兩種方法

          1、繼承Thread類

          2、實現Runnable接口

          這兩種方法的共同點

          不論用哪種方法,都必須用Thread(如果是Thead子類就用它本身)產生線程,然后再調用start()方法

          兩種方法的不同點

          1、繼承Thread類有一個缺點就是單繼承,而實現Runnable接口則彌補了它的缺點,可以實現多繼承

          2、繼承Thread類必須如果產生Runnable實例對象,就必須產生多個Runnable實例對象,然后再用Thread產生多個線程;而實現Runnable接口,只需要建立一個實現這個類的實例,然后用這一個實例對象產生多個線程。即實現了資源的共享性

          基于以上兩點所以建議用第二種方法

          下面用例子來做說明

          程序1:

           

          package com.dr.runnable1;
          //一個類只要繼承了Thread類,則此類就是多線程類
          class MyThread extends Thread
          {
              
          private String name;
              
          public MyThread(String name)
              
          {
                  
          this.name=name;
              }

              
          //如果要使用多線程,則必須有一個方法的主體
              public void run()
              
          {
                  
          //打印輸出
                  for(int i=0;i<10;i++)
                  
          {
                      System.out.println(
          this.name+"----->運行、、、、");
                  }

              }

          }

          public class Demo1 {
              
          public static void main(String args[])
              
          {

          //第一種方法
                   Runnable r1=new MyThread("線程A");
                  Runnable r2
          =new MyThread("線程B");
                  Runnable r3
          =new MyThread("線程C");
                 Thread t1
          =new Thread(r1);
                 Thread t2
          =new Thread(r2);
                 Thread t3
          =new Thread(r3);
                 t1.start();
                 t2.start();
                 t3.start();

            
          //        mt1.run();//線程執行,使用start方法
          //        mt2.run();
          //        mt3.run();

          //第二種方法

          //       MyThread mt1=new MyThread("線程A");
          //        MyThread mt2=new MyThread("線程B");
          //        MyThread mt3=new MyThread("線程C");
          //        mt1.start();
          //        mt1.start();//線程只能啟動一次
          //        mt2.start();
          //        mt3.start(); 

              }
           

          }
           

          程序的運行結果是:

          1

          這是繼承了Thread類,第一種方法產生多個Runnable實例對象,然后用Thread產生多個線程

          第二種方法,因為這個類已經繼承了Thread類,所以就可以直接利用它本身產生多個線程

          程序2:

           

          package com.dr.runnable1;
          class MyThread1 implements Runnable
          {
              
          private  int ticket=10;
              
          public void run()
              
          {
                  
          for(int i=0;i<500;i++)
                  
          {
                      
          if(this.ticket>0)
                      
          {
                          System.out.println(
          "賣票----->"+(this.ticket--));
                      }

                  }

              }

          }

          public class Demo2 {
              
          public static void main(String args[])
              
          {
                     MyThread1 mt
          =new MyThread1();
                  Thread t1
          =new Thread(mt);
                  Thread t2
          =new Thread(mt);
                  Thread t3
          =new Thread(mt);
                  t1.start();
                  t2.start();
                  t3.start();
              }
           

          }
           

          程序運行結果:

          2

          這個程序是實現Runnable了,產生一類的實例對象,然后用Thread產生多個線程。

          posted on 2010-11-07 18:11 馮魁 閱讀(7735) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          快樂每一天!

          Everything is an object!

          常用鏈接

          留言簿(2)

          隨筆檔案

          學習網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 隆昌县| 勐海县| 武邑县| 阳泉市| 蒲城县| 贵定县| 深水埗区| 新巴尔虎左旗| 建始县| 高安市| 永定县| 常熟市| 井陉县| 黔东| 扶绥县| 翁牛特旗| 馆陶县| 通海县| 滁州市| 苍梧县| 黑河市| 凭祥市| 嘉黎县| 鄂温| 张家口市| 曲麻莱县| 多伦县| 江山市| 都昌县| 通许县| 鄢陵县| 常州市| 东方市| 江永县| 山东省| 乌拉特前旗| 繁昌县| 高雄县| 四川省| 无为县| 涿州市|