如何解决线程安全的问题
核心思想:上鎖 分布式鎖
在同一個(gè)jvm中,多個(gè)線程需要競爭鎖的資源,最終只能夠有一個(gè)線程
能夠獲取到鎖,多個(gè)線程同時(shí)搶同一把鎖,誰(線程)能夠獲取到鎖,
誰就可以執(zhí)行到該代碼,如果沒有獲取鎖成功 中間需要經(jīng)歷鎖的升級(jí)過程
如果一致沒有獲取到鎖則會(huì)一直阻塞等待。
如果線程A獲取鎖成功 但是線程A一直不釋放鎖
線程B一直獲取不到鎖,則會(huì)一直阻塞等待。
代碼從那一塊需要上鎖?-----可能會(huì)發(fā)生線程安全性問題的代碼需要上鎖。
Juc并發(fā)編程 鎖 重入鎖 悲觀鎖 樂觀鎖 公平鎖 非公平鎖
線程0 線程1 同時(shí)獲取 this鎖,假設(shè)線程0 獲取到this ,意味著線程1沒有獲取到鎖
則會(huì)阻塞等待。等我們線程0 執(zhí)行完count-- 釋放鎖之后 就會(huì)喚醒 線程1從新進(jìn)入
到獲取鎖的資源。
獲取鎖與釋放鎖 全部都是有底層虛擬機(jī)實(shí)現(xiàn)好了。
對(duì)一塊代碼加鎖缺點(diǎn):
可能會(huì)影響到程序的執(zhí)行效率。
如果是同一把鎖 在多線程的情況下 最終只能夠給一個(gè)線程使用。
如果有線程持有了該鎖 意味著其他的線程 不能夠在繼續(xù)獲取鎖
核心思想:當(dāng)多個(gè)線程共享同一個(gè)全局變量時(shí),將可能會(huì)發(fā)生線程安全的代碼
上鎖,保證只有拿到鎖的線程才可以執(zhí)行,沒有拿到鎖的線程不可以執(zhí)行,需要阻塞等待。
總結(jié)
以上是生活随笔為你收集整理的如何解决线程安全的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql的左外连接丶右外连接与内连接的
- 下一篇: synchronized锁的基本用法