<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 迷人笑笑 閱讀(2196) 評論(1)  編輯  收藏

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

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


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

    常用鏈接

    留言簿(13)

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一欧洲中文字幕在线| 亚洲中文字幕在线无码一区二区 | 老司机亚洲精品影院| 亚洲色图在线观看| 亚洲AV无码国产剧情| 搜日本一区二区三区免费高清视频 | 亚洲Av无码乱码在线观看性色| 国产亚洲日韩在线三区| 亚洲女人18毛片水真多| 色视频在线观看免费| 久久久久久国产精品免费无码| 女人18毛片水最多免费观看| 国产亚洲情侣一区二区无| 亚洲一卡2卡三卡4卡无卡下载| 毛片基地看看成人免费| 九九九精品成人免费视频| 综合久久久久久中文字幕亚洲国产国产综合一区首| 亚洲爆乳少妇无码激情| 在线看片无码永久免费视频| 国产亚洲综合一区柠檬导航| 亚洲av无码有乱码在线观看| 亚洲精品无码成人片在线观看| 亚洲国产午夜电影在线入口| 国产白丝无码免费视频| 亚洲精品无码专区2| 国产婷婷成人久久Av免费高清| 亚洲AV伊人久久青青草原| 国产日韩一区二区三免费高清| 亚洲日韩中文在线精品第一| 亚洲AV无码一区二区三区牲色| 亚洲精品乱码久久久久久蜜桃 | 四虎永久在线观看免费网站网址| 国产AV无码专区亚洲A∨毛片| 免费人成视频在线播放| 国产免费观看视频| 亚洲欧美成aⅴ人在线观看| 性生交片免费无码看人| 一级一片免费视频播放| 中文字幕精品亚洲无线码一区应用| 国产精品白浆在线观看免费| 亚洲成在人线在线播放无码|