国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【java并發(fā)編程實(shí)戰(zhàn)】-----線程基本概念

2019-11-15 00:58:13
字體:
供稿:網(wǎng)友
java并發(fā)編程實(shí)戰(zhàn)】-----線程基本概念

學(xué)習(xí)Java并發(fā)已經(jīng)有一個多月了,感覺有些東西學(xué)習(xí)一會兒了就會忘記,做了一些筆記但是不系統(tǒng),對于Java并發(fā)這么大的“系統(tǒng)”,需要自己好好總結(jié)、整理才能征服它。希望同仁們一起來學(xué)習(xí)Java并發(fā)編程,共同進(jìn)步,互相指導(dǎo)。

在學(xué)習(xí)Java并發(fā)之前我們需要先理解一些基本的概念:共享、可變、線程安全性、線程同步、原子性、可見性、有序性。

共享和可變

要編寫線程安全的代碼,其核心在于對共享的和可變的狀態(tài)進(jìn)行訪問。

“共享”就意味著變量可以被多個線程同時(shí)訪問。我們知道系統(tǒng)中的資源是有限的,不同的線程對資源都是具有著同等的使用權(quán)。有限、公平就意味著競爭,競爭就有可能會引發(fā)線程問題。

“可變”是指變量的值在其生命周期內(nèi)是可以發(fā)生改變的。“可變”對應(yīng)的是“不可變”。我們知道不可變的對象一定是線程安全的,并且永遠(yuǎn)也不需要額外的同步(因?yàn)橐粋€不可變的對象只要構(gòu)建正確,其外部可見狀態(tài)永遠(yuǎn)都不會發(fā)生改變)。所以“可變”意味著存在線程不安全的風(fēng)險(xiǎn)。解決辦法:

1、不在線程中共享該狀態(tài)變量,可以將變量封裝到方法中。

2、將狀態(tài)變量修改為不可變的變量(final)。

3、訪問狀態(tài)變量時(shí)使用同步策略。

4、使用原子變量類。

線程安全性

線程安全是一個比較復(fù)雜的概念。其核心概念就是正確性。所謂正確性就是某各類的行為與其規(guī)范完全一致,即其近似與“所見即所知(we know it when we see it)”。當(dāng)多個線程訪問某各類時(shí),不管運(yùn)行時(shí)環(huán)境采用何種調(diào)度方式或者這些線程將如何交替執(zhí)行,并且在主調(diào)代碼中不需要任何額外的同步或者協(xié)同,這個類都能表現(xiàn)出正確的行為,那么就稱這個類是線程安全的。(引自:《Java并發(fā)編程實(shí)戰(zhàn)》)

線程同步

線程通過其核心就在于一個“同”。所謂“同”就是協(xié)同、協(xié)助、配合,“同步”就是協(xié)同步調(diào)昨,也就是按照預(yù)定的先后順序進(jìn)行運(yùn)行,即“你先,我等, 你做完,我再做”。

線程同步,就是當(dāng)線程發(fā)出一個功能調(diào)用時(shí),在沒有得到結(jié)果之前,該調(diào)用就不會返回,其他線程也不能調(diào)用該方法。就一般而言,我們在說同步、異步的時(shí)候,特指那些需要其他組件來配合或者需要一定時(shí)間來完成的任務(wù)。在多線程編程里面,一些較為敏感的數(shù)據(jù)時(shí)不允許被多個線程同時(shí)訪問的,使用線程同步技術(shù),確保數(shù)據(jù)在任何時(shí)刻最多只有一個線程訪問,保證數(shù)據(jù)的完整性。

線程同步的機(jī)制主要有:臨界區(qū)、互斥量、事件、信號量四種方式

1、臨界區(qū):通過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數(shù)據(jù)訪問。在任意時(shí)刻只允許一個線程對共享資源進(jìn)行訪問,如果有多個線程試圖訪問公共資源,那么在有一個線程進(jìn)入后,其他試圖訪問公共資源的線程將被掛起,并一直等到進(jìn)入臨界區(qū)的線程離開,臨界區(qū)在被釋放后,其他線程才可以搶占。

2、互斥量:采用互斥對象機(jī)制。 只有擁有互斥對象的線程才有訪問公共資源的權(quán)限,因?yàn)榛コ鈱ο笾挥幸粋€,所以能保證公共資源不會同時(shí)被多個線程訪問。互斥不僅能實(shí)現(xiàn)同一應(yīng)用程序的公共資源安全共享,還能實(shí)現(xiàn)不同應(yīng)用程序的公共資源安全共享。

3、信號量:它允許多個線程在同一時(shí)刻訪問同一資源,但是需要限制在同一時(shí)刻訪問此資源的最大線程數(shù)目。

4、事 件: 通過通知操作的方式來保持線程的同步,還可以方便實(shí)現(xiàn)對多個線程的優(yōu)先級比較的操作。

【引自:百度百科】

原子性

原子是世界上最小的單位,具有不可分割性。在我們編程的世界里,某個操作如果不可分割我們就稱之為該操作具有原子性。例如:i = 0,這個操作是不可分割的,所以該操作具有原子性。如果某個操作可以分割,那么該操作就不具備原子性,例如i++。非原子操作都存在線程安全問題,這個時(shí)候我們需要使用同步機(jī)制來保證這些操作變成原子操作,來確保線程安全。

可見性

線程可見性是指線程之間的可見性,即一個線程對狀態(tài)的修改對另一個線程是可見的,也就是一個線程修改的結(jié)果,另外一個線程立馬就知道了。比如volitile修飾的變量,就具備可見性。

有序性

有序性指的是數(shù)據(jù)不相關(guān)的變量在并發(fā)的情況下,實(shí)際執(zhí)行的結(jié)果和單線程的執(zhí)行結(jié)果是一樣的,不會因?yàn)橹嘏判虻膯栴}導(dǎo)致結(jié)果不可預(yù)知。volatile, final, synchronized,顯式鎖都可以保證有序性。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武威市| 安福县| 东丽区| 唐山市| 三穗县| 克什克腾旗| 平度市| 安阳市| 江阴市| 永兴县| 栾城县| 体育| 宁蒗| 沽源县| 瑞昌市| 中西区| 太谷县| 柘城县| 东乡县| 清流县| 梅河口市| 石河子市| 策勒县| 灌阳县| 余姚市| 台北市| 湖南省| 南涧| 壶关县| 沐川县| 大港区| 偏关县| 福安市| 长武县| 东乌| 乐昌市| 靖江市| 潼关县| 太和县| 沈阳市| 彩票|