java并發(fā)編程實戰(zhàn)(1):線程基本概念-編程開發(fā)技術

java并發(fā)編程實戰(zhàn)(1):線程基本概念-編程開發(fā)技術

ID:31191949

大小:66.50 KB

頁數(shù):3頁

時間:2019-01-07

java并發(fā)編程實戰(zhàn)(1):線程基本概念-編程開發(fā)技術_第1頁
java并發(fā)編程實戰(zhàn)(1):線程基本概念-編程開發(fā)技術_第2頁
java并發(fā)編程實戰(zhàn)(1):線程基本概念-編程開發(fā)技術_第3頁
資源描述:

《java并發(fā)編程實戰(zhàn)(1):線程基本概念-編程開發(fā)技術》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。

1、java并發(fā)編程實戰(zhàn)(1):線程基木概念-編程開發(fā)技術java并發(fā)編程實戰(zhàn)(1):線程基本概念原文出處:chenssy學習Java并發(fā)已經(jīng)有一個多月了,感覺有些東西學習一會兒了就會忘記,做了一些筆記但是不系統(tǒng),對于J3V3并發(fā)這么大的“系統(tǒng)”,需要口己好好總結、整理才能征服它。希望同仁們一起來學習Java并發(fā)編程,共同進步,互相指導。在學習Java并發(fā)Z前我們需要先理解一些基木的概念:共享、可變、線程安全性、線程同步、原子性、可見性、有序性。共享和可變要編寫線程安全的代碼,其核心在于對共享的和可變的狀態(tài)進行訪問。“

2、共享”就意味著變量可以被多個線程同時訪問。我們知道系統(tǒng)中的資源是有限的,不同的線程對資源都是具有著同等的使用權。有限、公平就意味著競爭,競爭就有可能會引發(fā)線程問題。“可變”是指變量的值在其生命周期內(nèi)是可以發(fā)生改變的?!翱勺儭睂氖恰安豢勺儭?。我們知道不可變的對彖一定是線程安全的,并冃永遠也不需耍額外的同步(因為一個不可變的對象只要構建正確,其外部可見狀態(tài)永遠都不會發(fā)生改變)。所以“可變”意味著存在線程不安全的風險。解決辦法:1、不在線程中共享該狀態(tài)變量,可以將變量封裝到方法中。2、將狀態(tài)變量修改為不可變的變量(f

3、inal)。3、訪問狀態(tài)變量時使用同步策略。4、使用原子變量類。線程安全性線程安全是一個比較復雜的概念。其核心概念就是止確性。所謂正確性就是某各類的行為與其規(guī)范完全一致,即英近似與“所見即所知(weknowitwhenweseeit)”o當多個線程訪問某各類時,不管運行時環(huán)境采用何種調(diào)度方式或者這些線程將如何交替執(zhí)行,并且在主調(diào)代碼屮不需要任何額外的同步或者協(xié)同,這個類都能表現(xiàn)出正確的行為,那么就稱這個類是線程安全的。(引自:《Java并發(fā)編程實戰(zhàn)》)線程同步線程通過其核心就在于一個“同”。所謂“同”就是協(xié)同、協(xié)助

4、、配合,“同步”就是協(xié)同步調(diào)昨,也就是按照預定的先后順序進行運行,即“你先,我等,你做完,我再做”。線程同步,就是當線程發(fā)出一個功能調(diào)用時,在沒有得到結果2而,該調(diào)用就不會返回,其他線程也不能調(diào)用該方法。就一般而言,我們在說同步、異步的時候,特指那些需要其他組件來配合或者需要一定時間來完成的任務。在多線程編程里面,一些較為敏感的數(shù)據(jù)吋不允許被多個線程同吋訪問的,使用線程同步技術,確保數(shù)據(jù)在任何時刻最多只有一個線程訪問,保證數(shù)據(jù)的完整性。線程同步的機制主要有:臨界區(qū)、互斥量、事件、信號量四種方式1、臨界區(qū):通過對多線

5、程的串行化來訪問公共資源或一段代碼,速度快,適合控制數(shù)據(jù)訪問。在任意時刻只允許一個線程對共享資源進行訪問,如果有多個線程試圖訪問公共資源,那么在有一個線程進入后,其他試圖訪問公共資源的線程將被掛起,并一直等到進入臨界區(qū)的線程離開,臨界區(qū)在被釋放后,其他線程才可以搶占。2、互斥量:采用互斥對彖機制。只冇擁冇互斥對彖的線程才冇訪問公共資源的權限,因為互斥對彖只有一個,所以能保證公共資源不會同時被多個線程訪問?;コ獠粌H能實現(xiàn)同一應用程序的公共資源安全共享,還能實現(xiàn)不同應用程序的公共資源安全共享。3、信號量:它允許多個線程

6、在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數(shù)目。4、事件:通過通知操作的方式來保持線程的同步,還可以方便實現(xiàn)對多個線程的優(yōu)先級比較的操作?!疽裕喊俣劝倏啤吭有栽耸鞘澜缟献钚〉膯挝?,具有不可分割性。在我們編程的世界里,某個操作如果不可分割我們就稱之為該操作具有原子性。例如:i二0,這個操作是不可分割的,所以該操作具有原子性。如果某個操作可以分割,那么該操作就不具備原子性,例如i++。非原子操作都存在線程安全問題,這個時候我們需要使用同步機制來保證這些操作變成原子操作,來確保線程安全??梢?/p>

7、性線程可見性是指線程Z間的可見性,即一個線程對狀態(tài)的修改對另一個線程是可見的,也就是一個線程修改的結果,另外一個線程立馬就知道了。比如volitile修飾的變量,就具備可見性。有序性有序性指的是數(shù)據(jù)不相關的變量在并發(fā)的情況卜,實際執(zhí)行的結杲和單線程的執(zhí)行結果是一樣的,不會因為重排序的問題導致結果不可預知。volat訂e,final,synchronized,顯式鎖都可以保證有序性。

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。