<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)

    隨筆檔案

    學習網站

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩免费视频一区二区| 亚洲AV色无码乱码在线观看| 日产久久强奸免费的看| 免费网站看v片在线香蕉| 亚洲av无码久久忘忧草| 久久精品毛片免费观看| 亚洲午夜在线电影| 午夜免费福利片观看| 久久精品国产亚洲AV麻豆~| 亚洲一区免费观看| 亚洲视频国产视频| 最近2019中文字幕免费大全5| 亚洲精品一卡2卡3卡三卡四卡| 亚洲视频免费观看| 亚洲人成免费网站| 天堂在线免费观看中文版| 亚洲av日韩综合一区久热| 大胆亚洲人体视频| 久久一区二区免费播放| 亚洲乱码日产一区三区| 好久久免费视频高清| 久久精品国产亚洲AV麻豆网站| 成人免费大片免费观看网站| 亚洲熟妇无码一区二区三区| 国产成人免费片在线视频观看| 污污免费在线观看| 国产亚洲av片在线观看16女人| 精品一区二区三区无码免费视频| 麻豆狠色伊人亚洲综合网站 | 最近最新的免费中文字幕| 亚洲偷自拍另类图片二区| 亚洲精品WWW久久久久久| 国产亚洲精品免费视频播放| 少妇中文字幕乱码亚洲影视 | a拍拍男女免费看全片| 亚洲日韩精品无码专区加勒比 | 亚洲AV成人无码久久精品老人| 国产成人免费午夜在线观看| 亚洲精品无码你懂的| 亚洲综合精品香蕉久久网| 麻花传媒剧在线mv免费观看 |