Java synchronized 鎖住了什麼

2021-06-21 19:12:29 字數 1053 閱讀 7733

synchronized 有三種使用場景:

1)是某個物件例項內,synchronized amethod(){}可以防止多個執行緒同時訪問這個物件的synchronized方法(如果乙個物件有多個synchronized方法,只要乙個執行緒訪問了其中的乙個synchronized方法,其它執行緒不能同時訪問這個物件中任何乙個synchronized方法)。這時,不同的物件例項的 synchronized方法是不相干擾的。也就是說,其它執行緒照樣可以同時訪問相同類的另乙個物件例項中的synchronized方法;

2)是某個類的範圍,synchronized static astaticmethod{}防止多個執行緒同時訪問這個類中的synchronized static 方法。它可以對類的所有物件例項起作用。

2、除了方法前用synchronized關鍵字,synchronized關鍵字還可以用於方法中的某個區塊中,表示只對這個區塊的資源實行互斥訪問。用法是: synchronized(this),它的作用域是當前物件;

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

如果這樣寫:

class swjprocess extends thread

}如果有new出了多個swjprocess,這個鎖不能阻止大家同時執行initsb。

原因:見第一條是"某個物件例項內,synchronized amethod(){}」, 如果你是不同的物件,不能保證**唯一執行。

解決方法:

1) 建立靜態函式。通過函式來執行這個initsb

即:增加函式public static swjprocess  instance()   if(instance() != null) instance().initsb()

2)  建立靜態的其它物件,通過其它物件來鎖**。

即:static string myname = "swj";

boolean initsb()//這樣保證不了唯一執行}

synchronized鎖住了誰

先來看一段 public class multithread else system.out.println tag tag num num catch interruptedexception e 注意觀察run方法輸出順序 public static void main string args ...

ORACLE處理表鎖住了的辦法

oracle資料庫操作中,我們有時會用到鎖表查詢以及解鎖和kill程序等操作,那麼這些操作是怎麼實現的呢?本文我們主要就介紹一下這部分內容。1 鎖表查詢的 有以下的形式 select count from v locked object select from v locked object 2 檢...

oracle被另乙個使用者鎖住了

2010 03 17 10 00 43 分類 oracle資料庫 標籤 字型大小大中小 訂閱一 處理過程 select object name as 物件名稱,s.sid,s.serial p.spid as 系統程序號 from v locked object l dba objects o v ...