android 建立多執行緒的幾種方法
在Java中,類僅支援單繼承,也就是說,當定義一個新的類的時候,它只能擴充套件一個外部類.這樣,如果建立自定義執行緒類的時候是通過擴充套件 Thread類的方法來實現的,那麼這個自定義類就不能再去擴充套件其他的類,也就無法實現更加複雜的功能。因此,如果自定義類必須擴充套件其他的類,那麼就可以使用實現Runnable介面的方法來定義該類為執行緒類,這樣就可以避免Java單繼承所帶來的侷限性。
還有一點最重要的就是使用實現Runnable介面的方式建立的執行緒可以處理同一資源,從而實現資源的共享。
1、通過擴充套件Thread類來建立多執行緒
假設一個影院有三個售票口,分別用於向兒童、成人和老人售票。影院為每個視窗放有100張電影票,分別是兒童票、成人票和老人票。三個視窗需要同時賣票,而現在只有一個售票員,這個售票員就相當於一個CPU,三個視窗就相當於三個執行緒。
程式中定義一個執行緒類,它擴充套件了Thread類。利用擴充套件的執行緒類在MutliThreadDemo類的主方法中建立了三個執行緒物件,並通過start()方法分別將它們啟動。
從結果可以看到,每個執行緒分別對應100張電影票,之間並無任何關係,這就說明每個執行緒之間是平等的,沒有優先順序關係,因此都有機會得到CPU的處理。但是結果
顯示這三個執行緒並不是依次交替執行,而是在三個執行緒同時被執行的情況下,有的執行緒被分配時間片的機會多,票被提前賣完,而有的執行緒被分配時間片的機會比較
少,票遲一些賣完。
可見,利用擴充套件Thread類建立的多個執行緒,雖然執行的是相同的程式碼,但彼此相互獨立,且各自擁有自己的資源,互不干擾。2、通過實現Runnable介面來建立多執行緒
由於這三個執行緒也是彼此獨立,各自擁有自己的資源,即100張電影票,因此程式輸出的結果和 1 結果大同小異。均是各自執行緒對自己的100張票進行單獨的處理,互不影響。
可見,只要現實的情況要求保證新建執行緒彼此相互獨立,各自擁有資源,且互不干擾,採用哪個方式來建立多執行緒都是可以的。因為這兩種方式建立的多執行緒程式能夠實現相同的功能。
3、通過實現Runnable介面來實現執行緒間的資源共享
現實中也存在這樣的情況,比如模擬一個火車站的售票系統,假如當日從A地發往B地的火車票只有100張,且允許所有視窗賣這100張票,那麼每一個視窗也相當於一個執行緒,但是這時和前面的例子不同之處就在於所有執行緒處理的資源是同一個資源,即100張車票。如果還用前面的方式來建立執行緒顯然是無法實現的,這種情況該怎樣處理呢?
結果正如前面分析的那樣,程式在記憶體中僅建立了一個資源,而新建的三個執行緒都是基於訪問這同一資源的,並且由於每個執行緒上所執行的是相同的程式碼,因此它們執行的功能也是相同的。
可見,如果現實問題中要求必須建立多個執行緒來執行同一任務,而且這多個執行緒之間還將共享同一個資源,那麼就可以使用實現Runnable介面的方式來建立多執行緒程式。而這一功能通過擴充套件Thread類是無法實現的,讀者想想看,為什麼?
實現Runnable介面相對於擴充套件Thread類來說,具有無可比擬的優勢。這種方式不僅有利於程式的健壯性,使程式碼能夠被多個執行緒共享,而且程式碼和資料資源相對獨立,從而特別適合多個具有相同程式碼的執行緒去處理同一資源的情況。這樣一來,執行緒、程式碼和資料資源三者有效分離,很好地體現了物件導向程式設計的思想。因此,幾乎所有的多執行緒程式都是通過實現Runnable介面的方式來完成的。相關文章
- Java建立多執行緒的一種方法Java執行緒
- Java建立多執行緒的幾種方式實現Java執行緒
- java 多執行緒之使用 interrupt 停止執行緒的幾種方法Java執行緒
- 執行緒池建立的幾種方式執行緒
- Python併發程式設計之建立多執行緒的幾種方法(二)Python程式設計執行緒
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- 【 Thread】建立執行緒的2種方法thread執行緒
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- Java建立多執行緒的四種方式Java執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- c# 多執行緒的幾種方式 【轉載】C#執行緒
- 【多執行緒高併發程式設計】二 實現多執行緒的幾種方式執行緒程式設計
- Android多執行緒之執行緒池Android執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒(五)---執行緒的Yield方法執行緒
- 多執行緒的建立 兩種方式以及使用建議執行緒
- 建立執行緒的三種方式執行緒
- 執行緒建立的四種方式執行緒
- Java面試之Java中實現多執行緒有幾種方法Java面試執行緒
- Android中的多程式、多執行緒Android執行緒
- Java多執行緒【三種實現方法】Java執行緒
- 幾種簡潔建立執行緒的方式以及使用注意事項執行緒
- Java提供的幾種執行緒池Java執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- 「有點收穫」三種基本方法建立執行緒執行緒
- 【進階之路】多執行緒條件下分段處理List集合的幾種方法執行緒
- java建立執行緒池的幾中方式Java執行緒
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- Java中實現執行緒安全HashSet的幾種方法 | baeldungJava執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 多執行緒核心技術(1)-執行緒的基本方法執行緒
- 執行緒的幾種狀態總結執行緒
- 面試官問我:建立執行緒有幾種方式?我笑了面試執行緒
- Android 多執行緒-----AsyncTask詳解Android執行緒
- Android入門教程 | 多執行緒Android執行緒
- 【.NET 6】多執行緒的幾種開啟方式和程式碼演示執行緒
- 多執行緒面試題之多執行緒有幾種實現方案,分別是什麼執行緒面試題
- Java 執行緒建立與常用方法Java執行緒