<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    把困難踩在腳下

    迎難而上

     

    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 馮魁 閱讀(7732) 評論(0)  編輯  收藏


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


    網站導航:
     

    導航

    統計

    公告

    快樂每一天!

    Everything is an object!

    常用鏈接

    留言簿(2)

    隨筆檔案

    學習網站

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 美女啪啪网站又黄又免费| 亚洲一区免费视频| 一级日本高清视频免费观看| 四虎国产精品免费视| 香蕉97碰碰视频免费| 亚洲AV永久无码精品一区二区国产 | 免费播放特黄特色毛片| 美女被免费视频网站| 亚洲人成影院在线观看| 国产精品永久免费视频| 亚洲人成精品久久久久| 国产精品99久久免费观看| 亚洲精品午夜视频| 久久久久国产精品免费免费搜索 | 亚洲精品成a人在线观看夫| 国产黄色片在线免费观看| 男男gvh肉在线观看免费| 久久久久国产成人精品亚洲午夜| 成全动漫视频在线观看免费高清版下载| 亚洲产国偷V产偷V自拍色戒| 精品熟女少妇av免费久久| 亚洲欧美日韩中文二区| 中文字幕精品无码亚洲字| 99精品视频在线观看免费专区| 亚洲国产品综合人成综合网站| 性感美女视频在线观看免费精品 | 最近最新高清免费中文字幕| 亚洲精品伊人久久久久| 亚洲成av人片一区二区三区| 国产午夜成人免费看片无遮挡| 亚洲视频在线观看视频| 真实乱视频国产免费观看| 国产一级一毛免费黄片| 亚洲综合男人的天堂色婷婷| 性做久久久久免费看| 久久九九AV免费精品| 亚洲日韩一区二区三区| 亚洲人成在线播放网站| 成人片黄网站A毛片免费| a成人毛片免费观看| 亚洲中文字幕久久精品蜜桃|