實現多線程的標準操作,基於Runnable接口實現java多線程

2020-12-08 人人都是程式設計師

1 為什麼要用Runnable

上一篇文章介紹了通過繼承Thread類,實現java多線程。但如果當我們創建的這個線程類還想繼承其他類的時候,這種方法就略顯局限了。這也是java單繼承的局限性。為了避免這種局限性,所以又提供了第二種多線程主體定義的形式:實現Runnable接口。

2 創建一個實現Runnable的對象

我們先創建一個RunnableDemo類,並在裡面創建一個MyThread2內部類,MyThread2實現Runnable接口。實現之後,MyThread2就是一個實現了Runnable的一個子類了。MyThread2類代碼如下圖。

MyThread2,添加一個run方法,這是業務核心。本次線程依然是實現了一個從1到100的報數功能。

3 創建並啟動線程

我們通過new Thread的方式創建3個先出對象。把MyThread2作為參數,傳入剛創建的Thread對象中。這樣就獲取了3個不同的線程對象,調用start方法啟動。效果如下。

從運行的結果來看,成功啟動並執行了3個線程。

4 Thread與Runnable

我們查閱Thread類源碼可以看到,Thread線程類有無參構造函數,也有有參構造函數,上篇文章用的是無參構造函數,本次使用的使用有參構造函數。其中參數就是Runnable函數式接口,而傳入的則是實現了Runnable接口的MyThread2類。

總的來說,通過實現Runnable來規避單繼承局限,但最終仍然是通過Thread的start()方法來啟動線程,而Runnable中的run方法則負責實現線程要跑的業務。

5 Lambda表達式

Runnable是函數式接口,那麼我們可以通過更簡潔的代碼來實現上面的功能。首先我們定義for循環,創建3個線程並啟動。在傳參的地方,通過lambda匿名函數的形式,直接定義我們需要線程做的業務。代碼及測試如下。

這裡創建線程並直接啟動,通過()->{}標準的lambda表達式進行匿名函數傳參入線程。每個人的編程習慣不一樣,使用什麼方式,就全看各位工匠的心情了。

6 結束語

人人都是程式設計師,感謝您的閱讀,歡迎關注。

相關焦點

  • 新手編程:Java多線程中Thread與Runnable的區別
    實現Runnable接口具有多線程能力,可以實現多線程啟動線程的方法:①創建子類對象 ②new Thread(對象).strart();推薦使用:避免OOP單繼承的局限性,方便被同一個對象多次使用;所以不管是繼承Thread類還是實現Runnable接口來實現多線程,最終都是通過Thread對象的API來控制線程的,因此熟悉Thread類的API是進行多線程編程的基礎。(
  • Java 實現線程的方式有幾種方式?帶有返回值的線程怎麼實現?
    Java 實現線程的方式有幾種方式?帶有返回值的線程怎麼實現?在Java線程開發中,有幾種方法開啟線程?假如需要得到線程返回的信息怎麼辦?可以實現嗎?凱哥將通過源碼和大家一起分享下線程怎麼將返回值帶回來的。
  • Java多線程帶返回值得Callable接口
    Java多線程帶返回值的Callable接口在面試的時候,有時候是不是會遇到面試會問你,Java中實現多線程的方式有幾種?你知道嗎?你知道Java中有可以返回值的線程嗎?在具體的用法你知道嗎?如果兩個線程同時來調用同一個計算對象,計算對象的call方法會被調用幾次你知道嗎?
  • Java之匿名內部類方式實現多線程的創建
    各位小夥伴們大家好,這次小編要講的是在Java當中用匿名內部類方式來實現多線程的創建。使用線程的內匿名內部類方式,可以方便得實現每個線程執行不同的線程任務操作。把實現類實現類接口,重寫接口中的方法,創建實現類對象合一步完成。匿名內部類的最終產物:子類/實現類對象,而這個類沒有名字。
  • 圖文並茂|創建線程和線程的常用方法(一次性講清線程基礎知識)
    線程線程是一條執行路徑,是程序執行時的最小單位,它是進程的一個執行流,是CPU調度和分派的基本單位,一個進程可以由很多個線程組成,線程間共享進程的所有資源,每個線程有自己的堆棧和局部變量。線程由CPU獨立調度執行,在多CPU環境下就允許多個線程同時運行。同樣多線程也可以實現並發操作,每個請求分配一個線程來處理。
  • 手寫Java線程池(超詳細解說)
    線程池類圖結構任務隊列, 隊列使用limit限制提交任務的大小, 實現RunnableQueue接口(RunnableQueue接口負責: 1.接收用戶提交的任務; 2.獲取任務隊列中的任務; 3.查看任務隊列大小), LinkedRunnableQueue實現RunnableQueue中的方法,
  • 大數據基礎:Java多線程入門
    而Java當中的一個重要知識點,就是多線程。今天的大數據基礎分享,我們就主要來講講Java多線程入門基礎。 更好的編程模型 java為多線程編程提供了考究並且一致的編程模型,使開發人員能夠更加專注於問題解決,即為所遇到的問題建立適合的模型,而不是絞盡腦汁地考慮如何將其多線程化。一旦開發人員建立好了模型,稍作修改總是能夠方便地映射到Java提供的多線程編程模型上。
  • 一篇文章全面吃透Java虛擬機,線程安全的實現方法
    由於java虛擬機的多線程是通過線程輪流切換並分配處理器執行時間的方式來實現的,所以,為了線程切換後能恢復到正確的執行位置,每條線程都需要有一個獨立的程序計數器,各條線程之間計數器互不影響,獨立存儲,所以我們說,它是線程私有的.
  • Java項目實踐,CountDownLatch實現多線程閉鎖
    摘要本文主要介紹Java多線程並發中閉鎖(Latch)的基本概念、原理、示例代碼、應用場景,通過學習,可以掌握多線程並發時閉鎖(Latch)的使用方法。概念「閉鎖」就是指一個被鎖住了的門將線程a擋在了門外(等待執行),只有當門打開後(其他線程執行完畢),門上的鎖才會被打開,a才能夠繼續執行。
  • java入門避坑必讀,通過Thread類創建java多線程
    欲善編程,多看、敲、討論;動眼、手、大腦。1 為什麼要用多線程平常我們做crud的時候,用到多線程的機會不多。但當我們要處理一些複雜的業務時,或者提高程序處理效率時,就繞不開多線程的使用。也有些時候,我們需要對某個接口進行並發測試,也可以通過多線程來做一個性能測試小程序。2 創建一個java線程類我們先創建一個ThreadDemo類,並在裡面創建一個MyThread內部類,MyThread繼承Thread類。繼承之後,MyThread就是一個線程類了,具備了線程類的所有屬性。
  • 複習一波,Java多線程輕鬆搞定面試官
    >第二種:編寫一類,實現Java.lang.Runnable接口,實現run方法即可。使用匿名內部類創建線程註:實現Runnable和繼承Thread區別使用實現Runnable接口的方式更能體現面向對象的編程思想Runnable內部的代碼可以被多個線程共享,適用於多個線程處理同一資源的情況
  • Java多線程工具類之循環柵欄計數器
    本篇是《凱哥(凱哥Java:kagejava)並發編程學習》系列之《並發工具類》教程的第二篇:《Java多線程下循環計數器》。一:CyclicBarrier是什麼cycBar是什麼呢?下面凱哥(kaigejava)將通過代碼實現集齊七龍珠召喚神龍的操作。三:代碼演示需求:集齊七顆龍珠,召喚神龍。3.1:未使用cycbarr的時候使用七個線程,來代替找龍珠的七個任務。每個線程在找龍珠的時候,耗時2s.就sleep。
  • 三萬字總結最全Java線程池源碼面試題
    1 為什麼要用線程池1.1 線程the more, the better?1、線程在java中是一個對象,更是作業系統的資源,線程創建、銷毀都需要時間。如果創建時間+銷毀時間>執行任務時間就很不合算。
  • Java並發編程:多線程如何實現阻塞與喚醒
    線程的阻塞和喚醒在多線程並發過程中是一個關鍵點,當線程數量達到很大的數量級時,並發可能帶來很多隱蔽的問題。如何正確暫停一個線程,暫停後又如何在一個要求的時間點恢復,這些都需要仔細考慮的細節。
  • java線程面試題集錦(第一版本)
    (三種或者四種,根據繼承和接口特點區別)3、Thread類中的start和run方法的區別?(start方法內部含有native的start0,官方文檔解釋start0內部調用了run方法)4、守護線程和非守護線程的區別?
  • Java線程的創建和線程的等待,喚醒機制
    在Java中多線程是非常緊張的一個片面,線程是指歷程中的一個實行流程,一個歷程中能夠運轉多個線程。好比java.exe歷程中能夠運轉非常多線程。線程老是屬於某個歷程,歷程中的多個線程分享歷程的內存。而歷程即是指一個內存中運轉的軟體法式,每個歷程都有本人自力的一塊內存空間,一個歷程中能夠啟動多個線程。好比在Windows體系中,一個運轉的exe即是一個歷程。一、歷程和線程的干係歷程是一個軟體法式,線程是歷程中一個小的實行單位,一個歷程中起碼有一個線程,一個歷程中有多個線程的時分,就稱之為多線程法式。
  • Java之Runnable表達式的簡單介紹
    各位小夥伴們大家好,這次小編要介紹的是Runnable表達式當我們要啟動一個線程去完成任務的時候,通常的做法會通過java.lang.Runnable接口來定義任務內容,並使用java.lang.Thread類來啟動線程,代碼如下:/*創建Runnable接口的實現類,重寫
  • Java 線程的生命周期及各階段狀態
    ,在調用start方法之前的線程所處的狀態;在此狀態下,線程還沒啟動,只是創建了一個線程對象存儲在堆中;比如:Thread t = new Thread(); // 此時t就屬於新建狀態當新建狀態下的線程對象調用了start方法,該線程對象就從新建狀態進入可運行狀態(runnable
  • Java中的線程(狀態轉換和線程間通信)
    Java運行是從main方法開始執行,會生成一個名為main線程。Java中的線程Java中的線程Thread類,是用來創建和啟動線程。使用方法Thread.start()來啟動一個線程。實現一個線程通常有這麼幾個方法。
  • Java之Thread和Runnable接口的區別
    Java之創建多線程的第二種方法,實現類,Java之創建多線程的第一種方式,thread類。這次小編要講的是這兩種方式的區別。其實就是實現Runnable接口創建多線程的好處,具體如下:避免了單繼承的局限性,一個類只能繼承一個類,這個類繼承了Thread類就不能繼承其它類。但是,實現了Runnable接口,還可以繼承其它的類,實現其它接口。