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 ...