多線程——Java繼承Thread類與實現(xiàn)Runnable接口的區(qū)別

      網(wǎng)友投稿 922 2022-05-29

      多線程——Java中繼承Thread類與實現(xiàn)Runnable接口的區(qū)別

      多線程——Java中繼承Thread類與實現(xiàn)Runnable接口的區(qū)別

      線程我只寫過繼承Thread類的,后來知道java多線程有三種方式,今天首先比較一下常用的繼承Thread類和實現(xiàn)Runnable接口的區(qū)別。

      按著Ctrl鍵進入Thread之后,發(fā)現(xiàn)Thread類也是Runnable接口的之類,這應(yīng)該就是它們之間的聯(lián)系了吧。

      繼承Thread類

      class MyThread1 extends Thread{

      private int breakfast=10;

      private String name;

      public MyThread1(String name){

      this.name=name;

      }

      public void run(){

      for(int i =0;i<500;i++){

      if(this.breakfast>0){

      System.out.println(this.name+"賣早餐---->"+(this.breakfast--));

      }

      }

      }

      public static void main(String[] args) {

      MyThread1 mt1= new MyThread1("一號窗口");

      MyThread1 mt2= new MyThread1("二號窗口");

      MyThread1 mt3= new MyThread1("三號窗口");

      mt1.start();

      mt2.start();

      mt3.start();

      }

      }

      實現(xiàn)Runnable接口

      [java] view plain copy

      class MyThread2 implements Runnable{

      private int breakfast =10;

      private String name;

      public void run(){

      for(int i =0;i<500;i++){

      if(this.breakfast>0){

      System.out.println(Thread.currentThread().getName()+"賣早餐---->"+(this.breakfast--));

      }

      }

      }

      public static void main(String[] args) {

      //設(shè)計三個線程

      MyThread2 mt = new MyThread2();

      Thread t1 = new Thread(mt,"一號窗口");

      Thread t2 = new Thread(mt,"二號窗口");

      Thread t3 = new Thread(mt,"三號窗口");

      t1.start();

      t2.start();

      t3.start();

      }

      }

      顯然,這兩個結(jié)果是不同的。為什么會這樣呢?我們來分析一下。

      其實,第一個繼承Thread類來實現(xiàn)多線程,其實是相當于拿出三件事即三個賣早餐10份的任務(wù)分別分給三個窗口,他們各做各的事各賣各的早餐各完成各的任務(wù),因為MyThread繼承Thread類,所以在newMyThread的時候在創(chuàng)建三個對象的同時創(chuàng)建了三個線程;實現(xiàn)Runnable的, 相當于是拿出一個賣早餐10份的任務(wù)給三個人去共同完成,newMyThread相當于創(chuàng)建一個任務(wù),然后實例化三個Thread,創(chuàng)建三個線程即安排三個窗口去執(zhí)行。

      一個類只能繼承一個父類,存在局限;一個類可以實現(xiàn)多個接口。在實現(xiàn)Runnable接口的時候調(diào)用Thread的Thread(Runnable run)或者Thread(Runnablerun,String name)構(gòu)造方法創(chuàng)建進程時,使用同一個Runnable實例,建立的多線程的實例變量也是共享的;但是通過繼承Thread類是不能用一個實例建立多個線程,故而實現(xiàn)Runnable接口適合于資源共享;當然,繼承Thread類也能夠共享變量,能共享Thread類的static變量;

      如果第二種實現(xiàn)Runnable接口的方式要想達到第一種繼承Thread類的效果,可以這樣來實例化線程類。

      [java] view plain copy

      //MyThread2 mt = new MyThread2();

      Thread t1 = new Threadnew MyThread2(),"一號窗口");

      Thread t2 = new Threadnew MyThread2(),"二號窗口");

      Thread t3 = new Thread(new MyThread2(),"三號窗口");

      總結(jié)

      其實,抽象來說,這并不是Thread類和Runnable接口的區(qū)別了,這可以看做是接口和繼承的問題。我們弄懂了接口和繼承,就不難理解Thread和Runnable。

      在剛接觸的時候可能會有些迷糊這二者的區(qū)別于聯(lián)系,但是實踐和總結(jié)過后我們會發(fā)現(xiàn)這是兩個完全不同的實現(xiàn)多線程,一個是多個線程分別完成自己的任務(wù),一個是多個線程共同完成一個任務(wù)。其實,在實現(xiàn)一個任務(wù)用多個線程來做也可以用繼承Thread類來實現(xiàn),只是比較麻煩,一般我們用實現(xiàn)Runnable接口來實現(xiàn)。

      轉(zhuǎn)發(fā)自:https://blog.csdn.net/xdd19910505/article/details/50732328

      Java 任務(wù)調(diào)度 多線程

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Jupyter工具系列之jupyter lab實用技巧
      下一篇:62_Java_多線程2_線程生命周期_線程安全
      相關(guān)文章
      亚洲精品无码永久在线观看你懂的| 亚洲精品无码久久久| 亚洲熟妇无码另类久久久| 亚洲AV无码一区二区三区鸳鸯影院 | 亚洲精品在线观看视频| 亚洲伊人久久精品影院| 久久久久亚洲AV成人网人人软件| 亚洲国产一级在线观看 | 亚洲国产精品成人AV在线| 亚洲午夜无码久久久久小说| 亚洲国产精品一区二区三区在线观看| 亚洲宅男天堂a在线| 91亚洲国产成人久久精品 | 亚洲国产日韩在线观频| 亚洲国产精品嫩草影院久久| 国产精品亚洲а∨天堂2021| 亚洲aⅴ无码专区在线观看| 亚洲男人的天堂网站| 亚洲老熟女五十路老熟女bbw| 亚洲精品国产精品| 无码天堂亚洲国产AV| 亚洲av高清在线观看一区二区| 亚洲M码 欧洲S码SSS222| 国产91精品一区二区麻豆亚洲| 中文字幕亚洲电影| 亚洲精品亚洲人成人网| 亚洲AV无码第一区二区三区| 久久精品国产亚洲精品2020| 亚洲a视频在线观看| 伊人久久亚洲综合影院首页| 国产亚洲欧美在线观看| 亚洲Aⅴ无码一区二区二三区软件| 亚洲免费在线观看| 亚洲一区二区女搞男| 亚洲av无码精品网站| 亚洲熟妇av一区| 亚洲精品国产国语| 日韩亚洲综合精品国产| 亚洲欧洲中文日韩久久AV乱码| 亚洲精品视频在线看| 亚洲美女又黄又爽在线观看|