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

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费精品国产自产拍观看| 综合亚洲伊人午夜网| 亚洲伦理中文字幕| 亚洲一级高清在线中文字幕| 精品在线免费视频| 中文字幕免费在线观看动作大片| 国产乱子伦精品免费女| 老司机午夜在线视频免费观| xvideos亚洲永久网址| 亚洲综合激情视频| 国内精自视频品线六区免费| 亚洲高清视频免费| 色哟哟国产精品免费观看| 亚洲情侣偷拍精品| 亚洲国产av玩弄放荡人妇| 亚洲欧洲免费视频| 亚洲人成网站日本片| 成人人免费夜夜视频观看| 国产日韩亚洲大尺度高清| 先锋影音资源片午夜在线观看视频免费播放 | 日本XXX黄区免费看| 亚洲AV永久无码天堂影院| 亚洲成?v人片天堂网无码| 免费av片在线观看网站| 亚洲中文字幕在线无码一区二区| 免费特级黄毛片在线成人观看| 99久久亚洲精品无码毛片| 免费av欧美国产在钱| 性生大片视频免费观看一级 | 亚洲六月丁香六月婷婷蜜芽| 成年女人看片免费视频播放器| 一区二区三区亚洲| 女人18毛片水最多免费观看| 日韩a毛片免费观看| 婷婷亚洲久悠悠色悠在线播放| 精品免费国产一区二区| 日本免费A级毛一片| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲国产精品一区二区久| 免费a级毛片在线观看| 国产精品亚洲а∨无码播放不卡|