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