1. 程式人生 > >各種鎖

各種鎖

類鎖 logs 當前 指定 然而 需要 得到 而不是 線程

Synchronized(實例鎖)和Static Synchronized(類鎖)區別

實例鎖:鎖在某個對象上,如果該類是單例的,那麽該鎖也有全局鎖的概念

類鎖:該鎖針對的類,無論實例多少個對象,那麽線程都共享該鎖。

(轉)原文地址:http://www.cnblogs.com/cangqiongbingchen/p/5806757.html

Java的鎖分為對象鎖和類鎖。

  1. 當兩個並發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內針對該對象的操作只能有一個線程得到執行。另一個線程必須等待當前線程執行完這個代碼塊以後才能執行該代碼塊。

  2. 然而,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。

  3. 尤其關鍵的是,當一個線程訪問object的一個synchronized(this)同步代碼塊時,其他線程對該object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。

  4. 同步加鎖的是對象,而不是代碼。因此,如果你的類中有一個同步方法,這個方法可以被兩個不同的線程同時執行,只要每個線程自己創建一個的該類的實例即可。

  5. 不同的對象實例的synchronized方法是不相幹擾的。也就是說,其它線程照樣可以同時訪問相同類的另一個對象實例中的synchronized方法。

  6. synchronized關鍵字是不能繼承的,也就是說,基類的方法synchronized f(){} 在繼承類中並不自動是synchronized f(){},而是變成了f(){}。繼承類需要你顯式的指定它的某個方法為synchronized方法。

  7.對一個全局對象或者類加鎖時,對該類的所有對象都起作用。

各種鎖