深入出不來的Java併發Synchronized!

8563084發表於2020-12-26

java併發中的Synchronized關鍵詞

如果在多執行緒的環境中,我們經常會遇到資源競爭的情況,比如多個執行緒要去同時修改同一個共享變數,這時候,就需要對資源的訪問方法進行一定的處理,保證同一時間只有一個執行緒訪問。

java提供了synchronized關鍵字,方便我們實現上述操作。

我們舉個例子,我們建立一個類,提供了一個setSum的方法:

如果我們在多執行緒的環境中呼叫這個calculate方法:

按照上面的方法,我們預計要返回1000, 但是實際上基本不可能得到1000這個值,因為在多執行緒環境中,對同一個資源進行同時操作帶來的不利影響。

那我們怎麼才能夠建執行緒安全的環境呢?

Synchronized關鍵詞 java提供了多種執行緒安全的方法,本文主要講解Synchronized關鍵詞,Synchronized關鍵詞可以有很多種形式:

當我們使用synchronized時,java會在相應的物件上加鎖,從而在同一個物件等待鎖的方法都必須順序執行,從而保證了執行緒的安全。

看下呼叫結果:

這裡synchronized將會鎖住該方法的例項物件,多個執行緒中只有獲得該例項物件鎖的執行緒才能夠執行。

Synchronized放在static方法前面和例項方法前面鎖住的物件不同。放在static方法前面鎖住的物件是這個Class本身,因為一個Class在JVM中只會存在一個,所以不管有多少該Class的例項,在同一時刻只會有一個執行緒可以執行該放方法。

Synchronized Blocks 有時候,我們可能不需要Synchronize整個方法,而是同步其中的一部分,這時候,我們可以使用Synchronized Blocks:


偉德【886699.bet】 偉德【886699.bet】 偉德【886699.bet】 偉德【886699.bet】 偉德【886699.bet】 偉德【886699.bet】 偉德【886699.bet】 偉德官網【886699.bet】 偉德官網【886699.bet】 偉德官網【886699.bet】 偉德網址【886699.bet】 888 真 人【886699.bet】 888 真 人【886699.bet】 888 真 人【886699.bet】 888 真 人【886699.bet】 888 真 人【886699.bet】 888 真 人【886699.bet】 888 真 人【886699.bet】 888 真 人【886699.bet】 888 真 人【886699.bet】 888 真 人【886699.bet】 必贏【886699.bet】 必贏【886699.bet】 必贏【886699.bet】 必贏【886699.bet】 必贏【886699.bet】 必贏【886699.bet】 必贏國際【886699.bet】 必贏國際【886699.bet】 必贏亞洲【886699.bet】 必贏亞洲【886699.bet】 北京賽車【886699.bet】 北京賽車【886699.bet】 北京賽車【886699.bet】 北京賽車【886699.bet】 北京賽車【886699.bet】 AG娛樂【886699.bet】 AG娛樂【886699.bet】 AG娛樂【886699.bet】 dafabet【886699.bet】 美高梅【886699.bet】 dafabet【886699.bet】 dafabet【886699.bet】 dafabet【886699.bet】 dafabet【886699.bet】 dafabet【886699.bet】 dafabet【886699.bet】 dafabet【886699.bet】 AG亞遊官網【886699.bet】 AG亞遊官網【886699.bet】 AG亞遊官網【886699.bet】 AG亞遊官網【886699.bet】 AG亞遊官網【886699.bet】 AG亞遊官網【886699.bet】 AG亞遊【886699.bet】 AG亞遊【886699.bet】 AG亞遊【886699.bet】 AG亞遊【886699.bet】 AG亞遊【886699.bet】 AG亞遊【886699.bet】 AG亞遊【886699.bet】 澳門娛 樂 城【886699.bet】 澳門娛 樂 城【886699.bet】 澳門娛 樂城【886699.bet】 澳門娛 樂 城【886699.bet】 美高梅【886699.bet】 美高梅【886699.bet】 美高梅【886699.bet】 幸運飛艇【886699.bet】 幸運飛艇【886699.bet】 幸運飛艇【886699.bet】 幸運飛艇【886699.bet】 幸運飛艇【886699.bet】 AG平臺【886699.bet】 AG平臺【886699.bet】 AG平臺【886699.bet】 AG平臺【886699.bet】 AG平臺【886699.bet】 果博東方【13388887582】 果博東方【13388887582】 果博東方【13388887582】 果博東方【17608832999】 果博東方【17608832999】 果博東方【17608832999】 果博東方【17608832999】 果博東方【17608832999】

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989885/viewspace-2745670/,如需轉載,請註明出處,否則將追究法律責任。

相關文章