<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 | 李大明
    受教了  回復  更多評論
      

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


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

    常用鏈接

    留言簿(13)

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲成A人片在线观看无码3D| 九九精品免费视频| 亚洲成A∨人片天堂网无码| 亚洲另类自拍丝袜第五页| 毛片免费视频播放| 亚洲成AV人片久久| 91手机看片国产永久免费| 亚洲欧洲精品国产区| 国产成人精品免费视频动漫| 亚洲酒色1314狠狠做| 亚洲人成在线免费观看| 91嫩草亚洲精品| 91频在线观看免费大全| 亚洲中文字幕无码久久| 日本成人免费在线| 一级毛片一级毛片免费毛片| 伊人久久大香线蕉亚洲五月天| 国产在线观看免费视频软件| 亚洲Aⅴ无码专区在线观看q| 中文字幕亚洲免费无线观看日本 | 免费一级肉体全黄毛片| 免费国产草莓视频在线观看黄| 伊伊人成亚洲综合人网7777| 午夜视频在线免费观看| 亚洲国产精品综合久久20| 日日AV拍夜夜添久久免费| 国产高清对白在线观看免费91| 亚洲AV电影院在线观看| 最近中文字幕mv免费高清视频7| 亚洲AV无码一区二区三区电影| 亚洲国产精品一区二区九九| 国产一区二区免费| 亚洲一区二区三区乱码在线欧洲| 全黄性性激高免费视频| 一级毛片免费视频| 亚洲熟妇丰满xxxxx| 在线观看亚洲成人| 67194熟妇在线永久免费观看| 福利片免费一区二区三区| 亚洲免费视频在线观看| 日本免费v片一二三区|