首頁(yè)技術(shù)文章正文

怎樣保證多線程同時(shí)段只有一個(gè)線程被訪問?

更新時(shí)間:2021-06-16 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

被多個(gè)線程同時(shí)訪問,使用線程同步技術(shù),可以確保數(shù)據(jù)在任何時(shí)刻最多只有一個(gè)線程訪問。


(1)同步代碼塊:使用 synchronized() 對(duì)需要完整執(zhí)行的語(yǔ)句進(jìn)行“包裹”,synchronized(Obj obj) 構(gòu)造方法里是可以傳入任何類的對(duì)象

同步方法:

在方法的申明里申明 synchronized


(2)死鎖

當(dāng)線程需要同時(shí)持有多個(gè)鎖時(shí),有可能產(chǎn)生死鎖。考慮如下情形:

線程 A 當(dāng)前持有互斥所鎖 lock1,線程 B 當(dāng)前持有互斥鎖 lock2。

接下來(lái),當(dāng)線程 A 仍然持有 lock1 時(shí),它試圖獲取 lock2,因?yàn)榫€程 B 正持有 lock2,因此線程 A 會(huì)阻塞等待線程 B 對(duì) lock2 的釋放。

如果此時(shí)線程 B 在持有 lock2 的時(shí)候,也在試圖獲取 lock1,因?yàn)榫€程 A 正持有 lock1,因此線程 B 會(huì)阻塞等待 A 對(duì) lock1 的釋放。

二者都在等待對(duì)方所持有鎖的釋放,而二者卻又都沒釋放自己所持有的鎖,這時(shí)二者便會(huì)一直阻塞下去。這種情形稱為死鎖。


(3)應(yīng)用場(chǎng)景有哪些?

XX去銀行開個(gè)銀行賬戶,銀行給 me 一張銀行卡和一張存折,XX用銀行卡和存折來(lái)搞事情:銀行卡瘋狂存錢,存完一次就看一下余額;同時(shí)用存折子不停地取錢,取一次錢就看一下余額。






猜你喜歡:

寫爬蟲是用多進(jìn)程還是多線程?

多線程爬蟲是什么?多線程爬蟲流程分析

Java基礎(chǔ)教程:多線程(5)-----線程的調(diào)度之優(yōu)先級(jí)

黑馬程序員Java開發(fā)課程

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!