Java之Thread和Runnable接口的區別

2020-12-08 彼岸end

各位小夥伴們大家好,好久不見,在之前的文章中,小編介紹了創建線程的兩種方式Java之創建多線程的第二種方法,實現類Java之創建多線程的第一種方式,thread類這次小編要講的是這兩種方式的區別。其實就是實現Runnable接口創建多線程的好處,具體如下:

避免了單繼承的局限性,一個類只能繼承一個類,這個類繼承了Thread類就不能繼承其它類。但是,實現了Runnable接口,還可以繼承其它的類,實現其它接口。增強了程序的擴展性,降低了程序的耦合性,實現Runnable接口的方式,把設置線程任務和開啟新線程進行了分離。

實現類中,重寫了run方法:用來設置線程任務。然後創建Thread類對象,調用start方法開啟新的線程。

代碼如下:

創建一個Runnable接口的實現類

public class RunnableImp2implements Runnable{

public void run(){

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

System.out.println("期末免掛"+i);

}

}

}

創建一個Runnable接口的實現類

public class RunnableImp1 implements Runnable{

public void run(){

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

System.out.println(Thread.currentThread().getName()+"-->"+i);

}

}

}

main方法

public class Demo01Runnable {

public static void main(String[] args) {

//3.創建一個Runnable接口的實現類對象

RunnableImp1 run=new RunnableImp1();

//4.創建Thread類對象,構造方法中傳遞Runnable接口中的實現類對象

Thread t=new Thread(new RunnableImp2());

Thread m=new Thread(run);

//5.調用Thread類對象中的start方法,開啟新的線程執行run方法

t.start();

m.start();

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

System.out.println(Thread.currentThread().getName()+"-->"+i);

}

}

}

關於Thread和Runnable接口的區別,主要是使用Runnable接口的好處,可以繼承其他類,實現多個接口,增強了程序的擴展性,降低了程序的耦合性。大家根據代碼自行理解,小編就不多說了,希望這篇文章可以幫到大家,也歡迎各位小夥伴補充和糾錯。

相關焦點

  • 新手編程:Java多線程中Thread與Runnable的區別
    Java多線程中Thread與Runnable的區別定義extends Thread子類繼承Thread具備多線程能力,可以實現多線程;啟動線程的方法:①創建子類對象+i);}}}上述示例執行後可以看到:主線程和子線程的執行順序本該是「先執行子線程、再執行主線程」,事實上卻是主線程和子線程交替執行(無法人為控制,由CPU調度執行),這便是多線程的特徵;繼承Thread
  • 手寫Java線程池(超詳細解說)
    線程池類圖結構任務隊列, 隊列使用limit限制提交任務的大小, 實現RunnableQueue接口(RunnableQueue接口負責: 1.接收用戶提交的任務; 2.獲取任務隊列中的任務; 3.查看任務隊列大小), LinkedRunnableQueue實現RunnableQueue中的方法,
  • Java之Runnable表達式的簡單介紹
    各位小夥伴們大家好,這次小編要介紹的是Runnable表達式當我們要啟動一個線程去完成任務的時候,通常的做法會通過java.lang.Runnable接口來定義任務內容,並使用java.lang.Thread類來啟動線程,代碼如下:/*創建Runnable接口的實現類,重寫
  • Java Thread類簡述
    今天我們來看下java.lang.Thread這個類。一般來說,線程包括以下這幾個狀態:創建(new)、就緒(runnable)、運行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。 當需要新起一個線程來執行某個子任務時,就創建了一個線程。
  • JNI-Thread中start方法調用與run方法回調分析
    眾所周知java是一個跨平臺的語言,用java編譯的代碼可以運行在任何安裝了jvm的系統上。然而各個系統的底層實現肯定是有區別的,為了使java可以跨平臺,於是jvm提供了叫java native interface(JNI)的機制。
  • 實現多線程的標準操作,基於Runnable接口實現java多線程
    1 為什麼要用Runnable上一篇文章介紹了通過繼承Thread類,實現java多線程。但如果當我們創建的這個線程類還想繼承其他類的時候,這種方法就略顯局限了。這也是java單繼承的局限性。為了避免這種局限性,所以又提供了第二種多線程主體定義的形式:實現Runnable接口。2 創建一個實現Runnable的對象我們先創建一個RunnableDemo類,並在裡面創建一個MyThread2內部類,MyThread2實現Runnable接口。
  • 圖文並茂|創建線程和線程的常用方法(一次性講清線程基礎知識)
    CPU在來回改變線程的執行機會稱之為線程上下文切換。java.lang;@FunctionalInterfacepublic interface Runnable { pubic abstract void run();}②:實現java.lang.Runnable接口,重寫run()方法,然後使用Thread類來包裝public class Main { public static
  • Java基礎教程:Java基礎知識之List接口
    List接口我們掌握了Collection接口的使用後,再來看看Collection接口中的子類,他們都具備那些特性呢?接下來,我們一起學習Collection中的常用幾個子類(java.util.List集合、java.util.Set集合)。
  • Java 10 大裝 B 寫法,看完可以出去吹牛逼了!
    - 不確定類型上面的泛型我們應該有常見到吧,邊界和通配符不懂的可以看下這篇文章吧:困擾我多年的Java泛型 和 ,終於搞清楚了。泛型要學會用,學好能裝B。6、LambdaLambda 表達式這是 Java 8 裡面添加的新特性,用來簡化匿名內部類以及結合函數式接口編程用的。
  • Java 實現線程的方式有幾種方式?帶有返回值的線程怎麼實現?
    凱哥將通過源碼和大家一起分享下線程怎麼將返回值帶回來的。一:無返回值類型的1:繼承Thread類2:實現Runnable接口這兩種是大家常用的,代碼demo就截圖吧。1:繼承Thread類的寫法定義:一個類型需要extends thread類,然後實現thread類的run方法。
  • 論Java中的抽象類與接口
    目錄抽象類和抽象方法定義與普通類的區別以及注意點:與普通方法的區別抽象方法和空方法體的方法不是同一個概念。抽象類的作用《thinking in java》抽象類是普通的類與接口之間的一種中庸之道。和類繼承相似,子接口擴展某個父接口,將會獲得父接口裡定義的所有抽象方法、常量Field、內部類和枚舉類定義。
  • 直觀講解一下 RPC 調用和 HTTP 調用的區別!
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫很長時間以來都沒有怎麼好好搞清楚RPC(即Remote Procedure Call,遠程過程調用)和HTTP調用的區別,不都是寫一個服務然後在客戶端調用麼?
  • 「原創」Java並發編程系列33|深入理解線程池(上)
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫並發編程必不可少的線程池,接下來分兩篇文章介紹線程池,本文是第一篇。當遇到單個任務處理時間比較短,但需要處理的任務數量很大時,線程會頻繁的創建銷毀,大量的時間和資源都會浪費在線程的創建和銷毀上,效率很低。這個時候就需要用的線程池了,線程作為一個工作者,線程執行完一個任務之後不銷毀,而是繼續執行其他的任務。
  • 三萬字總結最全Java線程池源碼面試題
    原理示意圖4 線程池API4.1 接口定義和實現類繼承關係圖可以認為ScheduledThreadPoolExecutor是最豐富的實現類!的重要區別public ScheduledFuture<?
  • Java多線程帶返回值得Callable接口
    如果這些你知道,那麼凱哥(凱哥Java:kaigejava)恭喜你,本文你可以不用看了。如果你不知道這些,那麼凱哥同樣要恭喜你,看了凱哥這篇文章之後,就知道這些了。我們來對比下實現Runnable和實現Callable接口的兩種方式不同點:1:需要實現的方法名稱不一樣:一個run方法,一個call方法2:返回值不同:一個void無返回值,一個帶有返回值的。其中返回值的類型和泛型V是一致的。3:異常:一個無需拋出異常,一個需要拋出異常。
  • java_線程池詳解
    java創建線程到底有幾種方式?2、線程池原理創建一個線程,需要一個Thread對象和一個Runable接口實例每次都去new一個Thread對象是很耗費時間的,而且不好管理線程池就是為了復用已存在的Thread對象,防止不停地創建Thread
  • 面試官:聽說你看過ThreadLocal源碼?我來瞅瞅?
    (threadLocalMap); for (Object o : arr) { if (o !@433619b6,值:abc弱引用key:java.lang.ThreadLocal@418a15e3,值:java.lang.ref.SoftReference@bf97a12--gc後--弱引用key:null,值:defimage.png如圖所示,因為這裡創建的ThreadLocal並沒有指向任何值,也就是沒有任何引用:
  • java入門避坑必讀,通過Thread類創建java多線程
    也有些時候,我們需要對某個接口進行並發測試,也可以通過多線程來做一個性能測試小程序。2 創建一個java線程類我們先創建一個ThreadDemo類,並在裡面創建一個MyThread內部類,MyThread繼承Thread類。繼承之後,MyThread就是一個線程類了,具備了線程類的所有屬性。
  • Java線程池8大拒絕策略,面試必問!
    前言談到java的線程池最熟悉的莫過於ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的這個api,大大的簡化了多線程代碼的開發。