大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 學Java基礎線程的初學教程

學Java基礎線程的初學教程

更新時間:2021-06-23 15:52:49 來源:動力節點 瀏覽1626次

Java開發線程特點基礎知識分享,線程提供的一些不太常用的方法及技術不管是初學者還是高級用戶或者是Java專家都需要了解。掌握線程、進程、多線程、并發、并行、同步、異步、線程類常見方法、線程生命周期、線程安全問題、死鎖、生產者和消費者等多線程核心知識點。

學java基礎

初學者階段:

1.線程名

程序中的每個線程都有一個名字,創建線程的時候會給它分配一個簡單的Java字符串來作為線程名。默認的名字是”Thread-0″,“Thread-1″,“Thread-2″等。

線程名可變,可在運行時修改它的名字,而不用在初始化的時候就指定好。name字段其實是一個簡單的字符串對象,它能達到2³¹-1個字符那么長足夠用了。這個名字并不是一個唯一性的標識,因此不同的線程也可以擁有同樣的線程名。還有一點不要把null用作線程名否則會拋出異常。

使用線程名來調試問題

既然可以設置線程名,如果遵循一定的命名規則出問題的時候排查起來就能更容易。在處理用戶請求的時候可以將事務ID追加到線程名后面,能減少排查問題的時間。

2.線程優先級

線程還有一個有意思的屬性優先級。線程的優先級介于1(MINPRIORITY)到10(MAXPRIORITY)之間,主線程默認是5(NORM_PRIORITY)。每個新線程都默認繼承父線程的優先級,如果沒設置過,所有線程的優先級都是5。這個是通常被忽視的屬性,可以通過getPriority()與setPriority()方法來獲取及修改它的值。線程的構造函數里是沒有這個功能。

什么地方會用到優先級?

不是所有的線程都是平等的,有的線程需要立即引起CPU重視,而有些線程則只是后臺任務。優先級就是用來把這些告訴給操作系統的線程調度器。在Takipi中開發的一錯誤跟蹤及排查的工具,負責處理用戶異常的線程的優先級是MAX_PRIORITY,而那些只是在上報新的部署情況的線程,優先級就要低一些。優先級高的線程從JVM的線程調度器那得到的時間會多一些,但其實并非是這樣的。

在操作系統層面每一個新線程都會對應一個本地線程,所設置的Java線程的優先級會被轉化成本地線程的優先級,這個在各個平臺上不一樣。在Linux上可以打開“-XX:+UseThreadPriorities”選項來啟用這項功能。線程優先級只是所提供的一個建議,和Linux本地的優先級相比Java線程的優先級并不能覆蓋全所有的級別(Linux共有1到99個優先級,線程的優先級在是-20到20之間)。最大的好處所設定的優先級能在每個線程獲得的CPU時間上有所體現,不過完全依賴于線程優先級的做法不推薦。

進階階段:

3.線程本地存儲

ThreadLocal是在Thread類之外實現的一個功能(java.lang.ThreadLocal),但它會為每個線程分別存儲一份唯一的數據。正如它的名字所說的,它為線程提供了本地存儲,也就是說所創建出來變量對每個線程實例來說都是唯一的。和線程名,線程優先級類似可以自定義出一些屬性,像存儲在Thread線程內部一樣。

全局變量不是什么好事

ThreadLocal可以用來存儲事務ID。如果代碼中出現未捕獲異常的時候它就相當有用了,最佳實踐是設置一個UncaughtExceptionHandler,這個是Thread類本身就支持的,但是得自己去實現一下這個接口。一旦執行到了UncaughtExceptionHandler里,幾乎沒有任何線索能夠知道到底發生了什么事情了。這會兒能獲取到的就只有Thread對象,之前導致異常發生的所有變量都無法再訪問了,因為那些棧幀都已經被彈出了。一旦到了UncaughtExceptionHandler里,這個線程就只剩下最后一口氣了,唯一能抓住的最后一根稻草就是ThreadLocal。

4.用戶線程及守護線程

Thread類。程序中的每個線程都會有一個狀態,是用戶狀態或是守護狀態。換句話說,前臺線程或是后臺線程,主線程默認是用戶線程,每個新線程都會從創建它的線程中繼承線程狀態。如果把一個線程設置成守護線程,那么它所創建的所有線程都會被標記成守護線程。如果程序中的所有線程都是守護線程的話,那么這個進程便會終止。可以通過Boolean.setDaemon(true)和.isDaemon()方法來查看及設置線程狀態。

什么時候會用到守護線程?

如果進程不必等到某個線程結束才能終止,那么這個線程就可以設置成守護線程。這省掉了正常關閉線程的那些麻煩事,可以立即將線程結束掉。換個角度來說,如果一個正在執行某個操作的線程必須要正確地關閉掉否則就會出現不好的后果的話,那么這個線程就應該是用戶線程。通常都是些關鍵的事務,比方說,數據庫錄入或者更新這些操作不能中斷。

高級階段:

5.處理器親和性

這里要講的會更靠近硬件,當軟件遇上了硬件。處理器親和性使得能夠將線程或者進程綁定到特定的CPU核上。這意味著只要是某個特定的線程,肯定只會在某個特定的CPU核上執行。通常來講如何綁定是由操作系統的線程調度器根據它自己的邏輯來決定的,它很可能會將前面提到的線程優先級也一并考慮進來。

這么做的好處在于CPU緩存。如果某個線程只會在某個核上運行,那么它的數據恰好在緩存里的概率就大大提高了。如果數據正好就在CPU緩存里,那么就沒有必要重新再從內存里加載了。所節省的這幾毫秒時間就能用在刀刃上,在這段時間里代碼可以馬上開始執行,也就能更好地利用所分配給它的CPU時間。當然了,操作系統層面可能會存在某種優化,硬件架構當然也是個很重要的因素,但利用了處理器的親和性至少能夠減小線程切換CPU的機率。

由于摻雜著多種因素處理器親和性到底對吞吐量有多大的影響,最好還是通過測試的方式來進行證明。也許這個方法并不是總能顯著地提升性能,但至少有一個好處就是吞吐量會相對穩定。親和策略可以細化到非常細的粒度上取決于具體想要什么,高頻交易行業便是這一策略最能大顯身手的場景之一。

以上就是動力節點小編介紹的"學Java基礎線程的初學教程",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 精品亚洲一区二区在线播放 | 一级毛片免费播放视频 | 欧美日韩中字 | 爱操在线视频 | 九九精品九九 | 欧美一级www片免费观看 | 日韩欧美毛片免费观看视频 | 97国产精品 | 色网站在线播放 | 欧美亚洲高清日韩成人 | 草草影院第一页yycccom | 日本免费黄色录像 | 亚洲一欧洲中文字幕在线 | 成 人 黄 色 免费网 | 久久久久久久国产精品毛片 | 四虎永久成人免费 | 美女又黄又免费的视频 | 中文字幕专区在线亚洲 | 国产成人亚洲综合欧美一部 | 久久久噜噜噜www成人网 | 老头老太做爰xxxx视频 | 九九九热| 亚洲精品国产不卡在线观看 | 欧美在线视频播放 | 九九99热 | 国产日韩亚洲欧洲一区二区三区 | 成人国产一区二区三区 | 久久精品这里热有精品 | 久久天天躁夜夜躁2019 | 天天干天天干天天天天天天爽 | 久久国产精品老人性 | 国产精品久久久久久一区二区 | 九九九九九九伊人 | 日韩精品a| 成人免费视频一区二区三区 | 精品久草 | 国产精品久久久久久久久久久久 | 色综合久久综合网欧美综合网 | 日本高清中文字幕视频在线 | 97影院午夜在线观看琪琪 | 真实国产精品视频国产网 |