Java線程核心操作之創(chuàng)建、啟動(dòng)與安全停止完全解析
1.創(chuàng)建線程的方法有哪些?
繼承Thread類
優(yōu)點(diǎn):繼承Thread操作簡單,用Thread.currentThread()可以得到當(dāng)前運(yùn)行的線程,用this也可以直接得到當(dāng)前運(yùn)行的線程
缺點(diǎn):繼承Thread類后不能繼承其他類

實(shí)現(xiàn)Runnable接口
若是一個(gè)方法繼承了其他父類,就可以實(shí)現(xiàn)java.lang.Runnable接口,實(shí)現(xiàn)接口需要重寫它的Run方法,然后在Thread構(gòu)造器里把Runnable對象作為參數(shù)傳遞進(jìn)去,然后使用strat()方法創(chuàng)建線程

優(yōu)點(diǎn):可以在繼承其他父類時(shí),創(chuàng)建線程,并且可以實(shí)現(xiàn)多個(gè)線程資源共享,可以操作同一個(gè)Runnable對象,可以把cpu代碼和數(shù)據(jù)分開,更好體現(xiàn)面向?qū)ο蟮木幊趟枷?/p>
缺點(diǎn):操作比較復(fù)雜,訪問當(dāng)前線程只能用Tread.currentTread()方法
實(shí)現(xiàn)Callable接口與FutureTask
java.util.concurrent.Callable接口類似于Runnable接口,但Callabe接口的call方法有返回值還可以拋出異常,想要?jiǎng)?chuàng)建線程需要先創(chuàng)建Callable對象,然后把對象作為參數(shù)傳給Future Task任務(wù)管理器,然后創(chuàng)建線程,執(zhí)行Callable任務(wù)、還可以得到任務(wù)結(jié)果


優(yōu)點(diǎn):可以繼承其他父類,并且實(shí)現(xiàn)資源共享
缺點(diǎn):操作復(fù)雜并且訪問當(dāng)前線程只能Thread.currentThead()
使用線程池
Java 5 引入的java.util.concurrent.ExecutorService接口和其他類,提供了線程池的支持,避免了查詢和創(chuàng)建線程,可以通過Executor的靜態(tài)方法創(chuàng)建不同類型的線程池、提高了線程管理效率

優(yōu)點(diǎn):可以避免重用預(yù)先創(chuàng)建的線程,避免了創(chuàng)建和查詢線程的開銷,提高了線程管理的效率。線程池可以合理的分配線程,避免資源浪費(fèi),如果遇到并發(fā)情況,線程池還可以快速提供線程來處理任務(wù),減少等待時(shí)間。合理設(shè)置線程池的大小,可以提高cpu的利用率和系統(tǒng)吞吐量
補(bǔ):系統(tǒng)吞吐量是指單位時(shí)間內(nèi)系統(tǒng)成功處理的任務(wù)或業(yè)務(wù)量
缺點(diǎn):代碼操作比較復(fù)雜,在設(shè)置線程池參數(shù)的時(shí)候如果出錯(cuò),可能會(huì)引起死鎖,資源進(jìn)程等問題,修復(fù)起來比較復(fù)雜
2.怎么啟動(dòng)線程?
通過Thread類的strat方法

3.怎么停止線程?
當(dāng)線程執(zhí)行 wait()/sleep()/join() 等可中斷阻塞方法時(shí),調(diào)用 interrupt() 會(huì)喚醒線程并拋出 InterruptedException,我們可以捕獲該異常實(shí)現(xiàn)線程中斷;而正常運(yùn)行的線程,需通過輪詢 interrupted()/isInterrupted() 判斷中斷狀態(tài),主動(dòng)停止線程(無異常拋出)
stop()暴力停止:已經(jīng)被廢棄,線程如果強(qiáng)行調(diào)用stop()暴力停止可能會(huì)引起清理性的工作無法完成
補(bǔ):
中斷
是一個(gè)動(dòng)作也就是調(diào)用Thread.interrupt()方法,改方法會(huì)發(fā)送一個(gè)中斷請求,這是一個(gè)信號,不是強(qiáng)制立刻停止線程。
中斷標(biāo)記(中斷狀態(tài))?
這是線程對象內(nèi)部的一個(gè)布爾標(biāo)志位(true/false):
true表示該線程收到了中斷請求(但未必已處理)。false表示沒有收到中斷請求或已被清除。
這個(gè)標(biāo)志位是持久化存儲在線程對象里的,直到被顯式改變。
到此這篇關(guān)于Java線程核心操作之創(chuàng)建、啟動(dòng)與安全停止完全解析的文章就介紹到這了,更多相關(guān)Java線程創(chuàng)建、啟動(dòng)與安全停止內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot集成開發(fā)實(shí)現(xiàn)商場秒殺功能
這篇文章主要介紹了springboot集成實(shí)現(xiàn)商品秒殺功能,秒殺系統(tǒng)業(yè)務(wù)流程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
java中fastjson生成和解析json數(shù)據(jù)(序列化和反序列化數(shù)據(jù))
本篇文章主要介紹了java中fastjson生成和解析json數(shù)據(jù)(序列化和反序列化數(shù)據(jù)),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
Java(TM) Platform SE binary 打開jar文件的操作
這篇文章主要介紹了Java(TM) Platform SE binary 打開jar文件的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
在Spring Boot2中使用CompletableFuture的方法教程
這篇文章主要給大家介紹了關(guān)于在Spring Boot2中使用CompletableFuture的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧2019-01-01
JVM(Java虛擬機(jī))簡介(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
Java虛擬機(jī)(Jvm)是可運(yùn)行Java代碼的假想計(jì)算機(jī)。Java虛擬機(jī)包括一套字節(jié)碼指令集、一組寄存器、一個(gè)棧、一個(gè)垃圾回收堆和一個(gè)存儲方法域。對java jvm 虛擬機(jī)感興趣的朋友通過本文一起學(xué)習(xí)吧2017-04-04
基于Java在netty中實(shí)現(xiàn)線程和CPU綁定
這篇文章主要介紹了基于Java在netty中實(shí)現(xiàn)線程和CPU綁定,文章圍繞主題的相關(guān)內(nèi)容展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05
Java實(shí)現(xiàn)整數(shù)分解質(zhì)因數(shù)的方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)整數(shù)分解質(zhì)因數(shù)的方法,結(jié)合實(shí)力形式分析了質(zhì)因數(shù)分解的原理與實(shí)現(xiàn)方法,涉及java數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
Springboot項(xiàng)目如何兼容老的Spring項(xiàng)目問題
這篇文章主要介紹了Springboot項(xiàng)目如何兼容老的Spring項(xiàng)目問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
SpringSecurity怎樣使用注解控制權(quán)限
這篇文章主要介紹了SpringSecurity怎樣使用注解控制權(quán)限的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

