java多线程原子操作_Java 多线程 - 原子操作CAS
什么是原子操作?如何實現(xiàn)原子操作?
假定有兩個操作?A?和?B,如果從執(zhí)行?A?的線程來看,當另一個線程執(zhí)行?B?時, 要么將?B?全部執(zhí)行完,要么完全不執(zhí)行?B,那么?A?和?B?對彼此來說是原子的。
實現(xiàn)原子操作可以使用鎖,鎖機制,滿足基本的需求是沒有問題的了,但是 有的時候我們的需求并非這么簡單,我們需要更有效,更加靈活的機制,?synchronized?關鍵字是基于阻塞的鎖機制,也就是說當一個線程擁有鎖的時候, 訪問同一資源的其它線程需要等待,直到該線程釋放鎖,這里會有些問題:首先,如果被阻塞的線程優(yōu)先級很高很重要怎么辦?其次, 如果獲得鎖的線程一直不釋放鎖怎么辦?(這種情況是非常糟糕的)。還有一種 情況,如果有大量的線程來競爭資源,那?CPU?將會花費大量的時間和資源來處 理這些競爭,同時,還有可能出現(xiàn)一些例如死鎖之類的情況,最后,其實鎖機制 是一種比較粗糙,粒度比較大的機制,相對于像計數(shù)器這樣的需求有點兒過于笨 重。
實現(xiàn)原子操作還可以使用當前的處理器基本都支持?CAS()的指令,只不過每 個廠家所實現(xiàn)的算法并不一樣,每一個?CAS?操作過程都包含三個運算符:一個內(nèi) 存地址?V,一個期望的值?A?和一個新值?B,操作的時候如果這個地址上存放的值 等于這個期望的值?A,則將地址上的值賦為新值?B,否則不做任何操作。
CAS?的基本思路就是,如果這個地址上的值和期望的值相等,則給其賦予新 值,否則不做任何事兒,但是要返回原值是多少。循環(huán)?CAS?就是在一個循環(huán)里不 斷的做?cas?操作,直到成功為止。
CAS?是怎么實現(xiàn)線程的安全呢?語言層面不做處理,我們將其交給硬件—?CPU?和內(nèi)存,利用?CPU?的多處理能力,實現(xiàn)硬件層面的阻塞,再加上?volatile?變 量的特性即可實現(xiàn)基于原子操作的線程安全。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的java多线程原子操作_Java 多线程 - 原子操作CAS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干荷叶加什么减肥最快
- 下一篇: 每天吃水煮菜一个月能瘦多少