java同步关键字_线程同步关键字之 synchronized
Java語(yǔ)言的關(guān)鍵字,當(dāng)它用來(lái)修飾一個(gè)方法或者一個(gè)代碼塊的時(shí)候,能夠保證在同一時(shí)刻最多只有一個(gè)線程執(zhí)行該段代碼。
1.什么場(chǎng)合使用
共享資源,在出現(xiàn)多個(gè)線程同時(shí)操作同一個(gè)資源的時(shí)候(一般是同一個(gè)對(duì)象),使用該關(guān)鍵字。
2.用法
1)方法定義上加synchronized關(guān)鍵字,如下
synchronized public method(){} 這是最常用的使用方法,默認(rèn)鎖當(dāng)前對(duì)象,理解成同一個(gè)時(shí)間 ,只有一個(gè)線程能訪問(wèn)當(dāng)前對(duì)象。
2)在代碼塊上使用,如下
synchronized (){
}
注:多個(gè)線程,訪問(wèn)類(lèi)多個(gè)實(shí)例,這樣會(huì)有多把鎖,且互不干涉。如果出現(xiàn)競(jìng)爭(zhēng)資源,且
不希望出現(xiàn)臟讀的情況的話,可以把訪問(wèn)的方法變成類(lèi)級(jí)別的(static) 然后加上synchronized 或者鎖住當(dāng)前類(lèi)文件:
synchronized (class){
}
3.延伸
1)異步調(diào)用:同一個(gè)對(duì)象上,如果存在2個(gè)方法,方法A加了同步鎖,方法B未加,此時(shí)如果有兩個(gè)線程,線程1一個(gè)調(diào)用方法A,線程2調(diào)用方法B。
流程分析:線程1調(diào)用方法A,然后拿到了對(duì)象鎖,線程B此時(shí)可以異步調(diào)用方法B,因?yàn)榉椒˙未有鎖。如果想同步操作,則需要在方法B加同步,因?yàn)橐粋€(gè)對(duì)象只有一個(gè)監(jiān)控鎖。這叫做異步調(diào)用
2).鎖重入
在synchronized修飾的方法里,可以直接調(diào)用synchronized修飾的方法,這是線程同步的,叫鎖重入。同理,子類(lèi)synchronized修飾的方法 可以調(diào)用父類(lèi)synchronized修飾的方法。說(shuō)明:一個(gè)線程在持有該對(duì)象的鎖的時(shí)候依然可以重新獲取這把鎖
3).抱著鎖的線程 發(fā)生異常,會(huì)釋放鎖,遇到異常一定要處理:
(1)記錄日志繼續(xù)執(zhí)行 (2)直接回滾
總結(jié)
以上是生活随笔為你收集整理的java同步关键字_线程同步关键字之 synchronized的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: unc0ver 越狱工具来袭,免电脑操作
- 下一篇: cmake未找到命令解决