教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java中如何解決多線程的同步問題?【java面試題】

更新時間:2020年09月29日10時31分 來源:傳智播客 瀏覽次數(shù):

(1)問題分析:

考官主要相對多線程方面的考核,被多個線程同時訪問的,使用線程同步技術(shù),確保數(shù)據(jù)在任何時刻最多只有一個線程訪問。

(2)核心答案講解:

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

同步方法:

在方法的申明里申明 synchronized

(3)問題擴展

死鎖

當線程需要同時持有多個鎖時,有可能產(chǎn)生死鎖??紤]如下情形:

線程 A 當前持有互斥所鎖 lock1,線程 B 當前持有互斥鎖 lock2。

接下來,當線程 A 仍然持有 lock1 時,它試圖獲取 lock2,因為線程 B 正持有 lock2,因此線程 A 會阻塞等待線程 B 對 lock2 的釋放。

如果此時線程 B 在持有 lock2 的時候,也在試圖獲取 lock1,因為線程 A 正持有 lock1,因此線程 B 會阻塞等待 A 對 lock1 的釋放。

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

(4)應(yīng)用場景

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


猜你喜歡:

Java中的四種訪問級別 

單例模式教程:單例模式的幾種實現(xiàn)方式

Java swing是做什么的?有什么作用? 

傳智播客Java高級軟件工程師課程

0 分享到:
和我們在線交談!