2025-02-17

一、synchronized關鍵字的作用域有二種:
1.是某個對象實例內,synchronized aMethod(){}可以防止多個線程同時訪問這個對象的synchronized方法(如果一個對象有多個synchronized方法,隻要一個線程訪問瞭其中的一個synchronized方法,其它線程不能同時訪問這個對象中任何一個synchronized方法)。這時,不同的對象實例的 synchronized方法是不相幹擾的。也就是說,其它線程照樣可以同時訪問相同類的另一個對象實例中的synchronized方法;
2.是某個類的范圍,synchronized static aStaticMethod{}防止多個線程同時訪問這個類中的synchronized static 方法。它可以對類的所有對象實例起作用。

二、除瞭方法前用synchronized關鍵字,synchronized關鍵字還可以用於方法中的某個區塊中,表示隻對這個區塊的資源實行互斥訪問。用法是: synchronized(this){/*區塊*/},它的作用域是當前對象;

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

總結:synchronized aMethod(){}是對象作用域的方法同步;

static synchronized aMethod(){}是類作用域的方法同步;

synchronized(this){/*區塊*/}是區塊作用域的同步。

希望本篇文章對你有所幫助。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *