把困難踩在腳下

          迎難而上

           

          java實現(xiàn)多線程兩種方法的比較

          先看一下java線程運行時各個階段的運行狀態(tài)


          java實現(xiàn)多線程有兩種方法

          1、繼承Thread類

          2、實現(xiàn)Runnable接口

          這兩種方法的共同點

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

          兩種方法的不同點

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

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

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

          下面用例子來做說明

          程序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();//線程執(zhí)行,使用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(); 

              }
           

          }
           

          程序的運行結(jié)果是:

          1

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

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

          程序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();
              }
           

          }
           

          程序運行結(jié)果:

          2

          這個程序是實現(xiàn)Runnable了,產(chǎn)生一類的實例對象,然后用Thread產(chǎn)生多個線程。

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


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          公告

          快樂每一天!

          Everything is an object!

          常用鏈接

          留言簿(2)

          隨筆檔案

          學(xué)習(xí)網(wǎng)站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高雄县| 霸州市| 高碑店市| 望城县| 钟祥市| 玛曲县| 德惠市| 固镇县| 湖北省| 华容县| 星子县| 延庆县| 财经| 普安县| 兰考县| 赤峰市| 新竹市| 天气| 新田县| 景德镇市| 合江县| 新巴尔虎左旗| 若羌县| 大竹县| 拜泉县| 鄂温| 徐水县| 瑞丽市| 阿鲁科尔沁旗| 长丰县| 隆回县| 库尔勒市| 北票市| 明溪县| 巫山县| 廉江市| 牟定县| 郴州市| 塔河县| 赤峰市| 康定县|