到底如何保證線程安全,總結(jié)得太好了!
互聯(lián)網(wǎng)架構(gòu)師后臺回復(fù) 2T 有特別禮包
一、線程安全等級
相對線程安全就是我們通常意義上所講的一個類是“線程安全”的。另外,多線程系列面試題和答案全部整理好了,微信搜索互聯(lián)網(wǎng)架構(gòu)師,在后臺發(fā)送:2T,可以在線閱讀。
在java語言中,大部分的線程安全類都屬于相對線程安全的,例如Vector、HashTable、Collections的synchronizedCollection()方法保證的集合。
4、線程兼容
線程兼容就是我們通常意義上所講的一個類不是線程安全的。
線程兼容是指對象本身并不是線程安全的,但是可以通過在調(diào)用端正確地使用同步手段來保證對象在并發(fā)環(huán)境下可以安全地使用。Java API中大部分的類都是屬于線程兼容的。如與前面的Vector和HashTable相對應(yīng)的集合類ArrayList和HashMap等。
5、線程對立
二、線程安全的實現(xiàn)方法
保證線程安全以是否需要同步手段分類,分為同步方案和無需同步方案。
而互斥是實現(xiàn)同步的一種手段,臨界區(qū)、互斥量和信號量都是主要的互斥實現(xiàn)方式。因此,在這4個字里面,互斥是因,同步是果;互斥是方法,同步是目的。
CAS指令執(zhí)行時,CAS指令指令時,當(dāng)且僅當(dāng)V處的值符合舊預(yù)期值A(chǔ)時,處理器用B更新V處的值,否則它就不執(zhí)行更新,但是無論是否更新了V處的值,都會返回V的舊值,上述的處理過程是一個原子操作。
可重入代碼的特點是不依賴存儲在堆上的數(shù)據(jù)和公用的系統(tǒng)資源、用到的狀態(tài)量都是由參數(shù)中傳入、不調(diào)用 非可重入的方法等。
(類比:synchronized擁有鎖重入的功能,也就是在使用synchronized時,當(dāng)一個線程得到一個對象鎖后,再次請求此對象鎖時時可以再次得到該對象的鎖)
2)線程本地存儲
如果一段代碼中所需的數(shù)據(jù)必須與其他代碼共享,那就看看這些共享數(shù)據(jù)的代碼是否能保證在同一個線程中執(zhí)行?如果能保證,我們就可以把共享數(shù)據(jù)的可見范圍限制在同一個線程之內(nèi)。這樣無需同步也能保證線程之間不出現(xiàn)數(shù)據(jù)的爭用問題。
符合這種特點的應(yīng)用并不少見,大部分使用消費隊列的架構(gòu)模式(如“生產(chǎn)者-消費者”模式)都會將產(chǎn)品的消費過程盡量在一個線程中消費完。
其中最重要的一個應(yīng)用實例就是經(jīng)典的Web交互模型中的“一個請求對應(yīng)一個服務(wù)器線程(Thread-per-Request)”的處理方式,這種處理方式的廣泛應(yīng)用使得很多Web服務(wù)器應(yīng)用都可以使用線程本地存儲來解決線程安全問題。
原文鏈接:https://blog.csdn.net/qq_26545305/article/details/79516610/
最后,關(guān)注公眾號互聯(lián)網(wǎng)架構(gòu)師,在后臺回復(fù):2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全。
正文結(jié)束
1.心態(tài)崩了!稅前2萬4,到手1萬4,年終獎扣稅方式1月1日起施行~
2.深圳一普通中學(xué)老師工資單曝光,秒殺程序員,網(wǎng)友:敢問是哪個學(xué)校畢業(yè)的?
3.從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

