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

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

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

    posts - 14,  comments - 7,  trackbacks - 0
     

    Java中線程的創建有兩種方式:

    1.  通過繼承Thread類,重寫Threadrun()方法,將線程運行的邏輯放在其中

    2.  通過實現Runnable接口,實例化Thread

        在實際應用中,我們經常用到多線程,如車站的售票系統,車站的各個售票口相當于各個線程。當我們做這個系統的時候可能會想到兩種方式來實現,繼承Thread類或實現Runnable接口,現在看一下這兩種方式實現的兩種結果。

    package com.dr.threadtest;
    class MyThread3 extends Thread{
        
        
    private int ticket = 10;
        
    private String name;
        
    public MyThread3(String name){
            
    this.name =name;
        }

        
        
    public void run(){
            
    for(int i =0;i<500;i++){
                
    if(this.ticket>0){
                    System.out.println(
    this.name+"賣票---->"+(this.ticket--));
                }

            }

        }

    }

    public class Demo07 {

        
        
    public static void main(String[] args) {
            MyThread3 mt1
    = new MyThread3("一號窗口");
            MyThread3 mt2
    = new MyThread3("二號窗口");
            MyThread3 mt3
    = new MyThread3("三號窗口");
            mt1.start();
            mt2.start();
            mt3.start();
        }


    }

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

            }

        }

    }

    public class Demo02 {

        
        
    public static void main(String[] args) {
            
    // TODO Auto-generated method stub
            
    //設計三個線程
             MyThread1 mt = new MyThread1();
             Thread t1 
    = new Thread(mt,"一號窗口");
             Thread t2 
    = new Thread(mt,"二號窗口");
             Thread t3 
    = new Thread(mt,"三號窗口");
    //         MyThread1 mt2 = new MyThread1();
    //         MyThread1 mt3 = new MyThread1();
             t1.start();
             t2.start();
             t3.start();
        }


    }


     

         為什么會出現這種結果吶。我們不妨做個比喻,其實剛的程序,繼承Thread類的,我們相當于拿出三件事即三個賣票10張的任務分別分給三個窗口,他們各做各的事各賣各的票各完成各的任務,因為MyThread繼承Thread類,所以在new MyThread的時候在創建三個對象的同時創建了三個線程;實現Runnable的, 相當于是拿出一個賣票10張得任務給三個人去共同完成,new MyThread相當于創建一個任務,然后實例化三個Thread,創建三個線程即安排三個窗口去執行。

          用圖表示如下

     

    在我們剛接觸的時候可能會迷糊繼承Thread類和實現Runnable接口實現多線程,其實在接觸后我們會發現這完全是兩個不同的實現多線程,一個是多個線程分別完成自己的任務,一個是多個線程共同完成一個任務。

          其實在實現一個任務用多個線程來做也可以用繼承Thread類來實現只是比較麻煩,一般我們用實現Runnable接口來實現,簡潔明了。

           大多數情況下,如果只想重寫 run() 方法,而不重寫其他 Thread 方法,那么應使用 Runnable 接口。這很重要,因為除非程序員打算修改或增強類的基本行為,否則不應為該類(Thread)創建子類。

    posted on 2010-11-08 13:46 迷人笑笑 閱讀(2197) 評論(1)  編輯  收藏

    FeedBack:
    # re: Java中thread類與Runnable接口的區別
    2012-04-10 17:57 | 李大明
    受教了  回復  更多評論
      

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


    網站導航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(13)

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 女人与禽交视频免费看| 91成人在线免费视频| 国产在线观看www鲁啊鲁免费| 免费视频精品一区二区三区 | 亚洲精品无码不卡在线播放HE| 亚洲AV成人片色在线观看| 国产久爱免费精品视频 | 亚洲精品二区国产综合野狼| 中文字幕在线视频免费观看| 国产亚洲?V无码?V男人的天堂| 亚洲男人电影天堂| a拍拍男女免费看全片| 亚洲免费观看网站| 亚洲成在人线aⅴ免费毛片| 亚洲精品第一综合99久久| 色吊丝最新永久免费观看网站 | 野花香在线视频免费观看大全| 久久久久国色AV免费观看性色| 亚洲精品无码专区在线在线播放| 亚洲日韩国产欧美一区二区三区 | 亚洲国产V高清在线观看| 久久久精品视频免费观看| 国产∨亚洲V天堂无码久久久| 亚洲av日韩综合一区久热| 亚洲男人在线无码视频| 亚洲五月午夜免费在线视频| 日本红怡院亚洲红怡院最新| 亚洲视频在线免费播放| 久久亚洲中文无码咪咪爱| 日韩一卡2卡3卡4卡新区亚洲| 噜噜噜亚洲色成人网站| 亚洲日本一区二区三区在线| 久久青草免费91观看| 亚洲爆乳大丰满无码专区| 亚洲午夜久久久久妓女影院| 37pao成人国产永久免费视频| 国产AV无码专区亚洲精品| 毛片A级毛片免费播放| 亚美影视免费在线观看| 亚洲人成7777影视在线观看| 亚洲av无码国产精品色在线看不卡|