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

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

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


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

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

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

