久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

Java多線程synchronized同步方法詳解

瀏覽:5日期:2022-09-04 16:57:31

1、synchronized 方法與鎖對象

線程鎖的是對象。

1)A線程先持有 object 對象的 Lock 鎖, B線程可以以異步的方式調用 object 對象中的非 synchronized 類型的方法

2)A線程先持有 object 對象的 Lock 鎖, B線程如果在這時調用 object 對象中的 synchronized 類型的方法,則需要等待,也就是同步。

2、臟讀(DirtyRead)

示例:

public class DirtyReadTest { public static void main(String[] args) { try { PublicVar publicVar = new PublicVar(); ThreadA thread = new ThreadA(publicVar); thread.start(); Thread.sleep(200); publicVar.getValue(); } catch (Exception e) { e.printStackTrace(); } } static class ThreadA extends Thread { private PublicVar publicVar; public ThreadA(PublicVar publicVar) { this.publicVar = publicVar; } @Override public void run() { super.run(); publicVar.setValue('B', 'BB'); } } static class PublicVar { public String username = 'A'; public String password = 'AA'; synchronized public void setValue(String username, String password) { try {this.username = username;Thread.sleep(1000);this.password = password;System.out.println('setValue method thread name = ' + Thread.currentThread().getName() + 'tusername = ' + username + 'tpassword = ' + password); } catch (Exception e) {e.printStackTrace(); } } // 因為 getValue 方法是非 synchronized 方法,所以造成了臟讀 public void getValue() { System.out.println('getValue method thread name = ' + Thread.currentThread().getName() + 'tusername = ' + username + 'tpassword = ' + password); } }}

結果如圖:

Java多線程synchronized同步方法詳解

3、synchronized 鎖重入

'可重入鎖'的概念是:

自己可以再次活得自己的內部鎖。比如有1條線程獲得了某個對象的鎖,此時這個對象鎖還沒有釋放,當其再次想要獲取這個對象的鎖的時候還是可以獲取的,如果不可以鎖重入的話,就會造成死鎖。

可重入鎖也支持在父子類繼承的環境中:在繼承中,子類是完全可以通過“可重入鎖”調用父類的同步方法的。

4、出現異常,鎖自動釋放

線程出現異常,會釋放當前線程的鎖

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 建瓯市| 富顺县| 宁强县| 河西区| 平顶山市| 荔波县| 安阳市| 揭阳市| 邵东县| 永济市| 山阴县| 神木县| 黎平县| 涟水县| 昆山市| 广饶县| 昔阳县| 佳木斯市| 三都| 色达县| 福清市| 怀宁县| 修水县| 安义县| 东至县| 淮阳县| 台山市| 昭通市| 婺源县| 固镇县| 上高县| 固始县| 崇明县| 安陆市| 栾川县| 施秉县| 安仁县| 郑州市| 泸州市| 沈丘县| 昂仁县|