1. 程式人生 > >互聯網並發編程一

互聯網並發編程一

() blog 量變 而且 容器 通過 exce eight 次數

線程安全概念:當多個線程訪問某一個類(對象或方法)時,這個對象始終都能表現出正確的行為,那麽這個類(對象或方法)就是線程安全的。

分析:當多個線程訪問myThread的run方法時,以排隊的方式進行處理(這裏排對是按照CPU分配的先後順序而定的),一個線程想要執行synchronized修飾的方法裏的代碼:1 嘗試獲得鎖  2 如果拿到鎖,執行synchronized代碼體內容;拿不到鎖,這個線程就會不斷的嘗試獲得這把鎖,直到拿到為止,而且是多個線程同時去競爭這把鎖。(也就是會有鎖競爭的問題)

synchronized:可以在任意對象及方法上加鎖,而加鎖的這段代碼稱為"互斥區"或"臨界區"。取得的鎖都是對象鎖,而不是把一段代碼(方法)當做鎖,所以代碼中哪個線程先執行synchronized關鍵字的方法,哪個線程就持有該方法所屬對象的鎖(Lock),在靜態方法上加synchronized關鍵字,表示鎖定.class類,類一級別的鎖(獨占.class類)。

volatile:用volatile修飾的變量,線程在每次使用變量的時候,都會讀取變量修改後的值。volatile很容易被誤用,用來進行原子性操作。

AtomicInteger:一個提供原子操作的Integer的類。在Java語言中,++i和i++操作並不是線程安全的,在使用的時候,不可避免的會用到synchronized關鍵字。而AtomicInteger則通過一種線程安全的加減操作接口。

臟讀 :臟讀就是指當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到數據庫中,這時,另外一個事務也訪問這個數據,然後使用了這個數據。

在線程裏調用變量變量必須用final修飾

CountDownLatch:

一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。

主要方法

public CountDownLatch(int count);

public void countDown();

public void await() throws InterruptedException

構造方法參數指定了計數的次數

countDown方法,當前線程調用此方法,則計數減一

awaint方法,調用此方法會一直阻塞當前線程,直到計時器的值為0

ThreadLocal:ThreadLocal為每個使用該變量的線程提供獨立的變量副本,所以每一個線程都可以獨立地改變自己的副本,而不會影響其它線程所對應的副本。

同步類容器

技術分享

並發類容器

技術分享

技術分享

技術分享

技術分享

技術分享

技術分享

技術分享

技術分享

互聯網並發編程一