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

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

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


    網站導航:
     
    <2012年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    常用鏈接

    留言簿(13)

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精华国产精华精华液好用 | 在线观看免费播放av片| 亚洲成a人片77777老司机| 亚洲欧洲成人精品香蕉网| 亚洲国产综合精品中文第一区 | 亚洲高清有码中文字| 中文字幕无线码中文字幕免费| 日本在线免费观看| 爽爽日本在线视频免费| 亚洲av午夜福利精品一区| 免费成人在线视频观看| 国产乱弄免费视频| 免费无码婬片aaa直播表情| 亚洲精品第一国产综合精品99| 亚洲va在线va天堂va手机| 免费国产黄网站在线看| 亚洲高清国产拍精品青青草原| 亚洲另类精品xxxx人妖| 最近最新的免费中文字幕| 欧洲亚洲国产精华液| 91精品免费久久久久久久久| 人人狠狠综合久久亚洲高清| 亚洲精品无码专区久久同性男| 一二三区免费视频| 精品国产免费一区二区| 91在线亚洲精品专区| 免费观看AV片在线播放| 亚洲高清在线播放| 久久天天躁狠狠躁夜夜免费观看| 国产亚洲av片在线观看16女人| 国产精品亚洲专区无码牛牛| caoporn成人免费公开| 亚洲AV无码专区国产乱码电影| 16女性下面扒开无遮挡免费| 成人永久免费高清| 亚洲国产人成在线观看| 91精品国产免费久久国语麻豆| 免免费国产AAAAA片| 亚洲av之男人的天堂网站| 成人免费大片免费观看网站| 久久亚洲AV成人无码软件|