public
class
synchronizedtest
catch
(interruptedexception e)
}public
static
void
main
(string[
] args)).
start()
;new
thread((
)->).
start();}}
此處列舉的是不同例項呼叫的情況
此處列舉的是同一例項呼叫的情況
//鎖住了例項中的成員變數
public
void
test3()
catch
(interruptedexception e)}}
public
static
void
main
(string[
] args)).
start()
;new
thread((
)->).
start();}}
同乙個例項物件的成員屬性肯定是同乙個,此處列舉的是不同例項的情況,但是 依舊實現了同步,原因如下:
integer存在靜態快取,範圍是-128 ~ 127,當使用integer a = 127 或者 integer a = integer.valueof(127) 這樣的形式,都是從此快取拿。如果使用 integer a = new integer(127),每次都是乙個新的物件。此例中,兩個物件例項的成員變數 lockobject 其實是同乙個物件,因此實現了同步。還有字串常量池也要注意。所以此處關注是,同步**塊傳參的物件是否是同乙個。這跟第二個方式其實是同一種。
結果如下:
synchronized的幾種用法
1.方法宣告時使用,放在範圍操作符 public等 之後,返回型別宣告 void等 之前.這時,執行緒獲得的是成員鎖,即一次只能有乙個執行緒進入該方法,其他執行緒要想在此時呼叫該方法,只能排隊等候,當前執行緒 就是在synchronized方法內部的執行緒 執行完該方法後,別的執行緒才能進入.2.對...
Synchronized 的幾種用法
這個也是我們用得最多的,只要涉及執行緒安全,上來就給方法來個同步鎖。這種方法使用雖然最簡單,但是只能作用在單例上面,如果不是單例,同步方法鎖將失效。用在普通方法 private synchronized void synchronizedmethod catch interruptedexcepti...
Synchronized的幾種用法
我們都知道 synchronized 是執行緒安全同步用的,大部分程式可能只會用到同步方法上面。其實 synchronized 可以用到更多的場合,棧長列舉了以下幾個用法。這個也是我們用得最多的,只要涉及執行緒安全,上來就給方法來個同步鎖。這種方法使用雖然最簡單,但是只能作用在單例上面,如果不是單例...