synchronized,理解再深入那麼一點

2022-07-17 18:24:20 字數 1198 閱讀 5806

class object

}

【描述】執行緒1,對synchronized(element)訪問,

執行緒2,對synchronized a()方法進行訪問。

【結論】獲取成員變數的鎖,與獲取物件的鎖,是獨立的。並不存在說,要獲取物件的鎖,就要求成員變數或神馬的都沒有鎖存在了。

即,鎖成員變數與鎖整個物件是獨立的。

【描述】在前面描述的基礎上,如果method()方法內部,又需要對element()同步訪問。

【結論】那就得等了,等先前對element的鎖釋放。

class object extends thread

public synchronized void run(){}

}

【描述】

run()的時候,可以呼叫物件內synchronized b(),因為反正其已獲取到物件鎖。但如果另外乙個執行緒,已獲取物件鎖,在訪問fun(),那麼run()就必須得等了。

【結論】給run()前加synchronized需謹慎,可能造成的影響有:1. 如果run()一早獲取物件鎖,那麼它跑起來,別人都別想訪問這裡的同步方法了,例如fun();2. 如果run()一早沒有獲取物件鎖,那麼它跑不起來,必須得等別人釋放了物件的鎖,如fun()執行結束,該執行緒才可以跑起來。

class object

}

【描述】synchronized除了用於物件、成員變數,還可用於鎖「類」。

【備註】

1. 被synchronized宣告的方法被稱為同步方法,被其修飾的**塊稱為同步語句。無論是同步方法還是同步語句,只要宣告為同步了,在同一時刻,同乙個物件的同步xx是不可以被同時訪問的,而不同物件之間的同步方法是互不干擾的。

2. private byte  lock= new byte[0];

public void change() 

}自定義鎖注意事項:

a)必須是private,防止在類外部引用改變。

b)如果可能用到,重寫get方法,返回物件的clone,而不是本身。

3.class foo     

public

void

methodbbb()    }

synchronized理解及優化

synchronized object object不要使用string常量 integer 和long 鎖的是物件不是 this class 通過物件頭上的標識,markword的前四個位元組 synchronized修飾方法時 this為這把鎖 synchronized修飾靜態方法時,當前類名....

再理解敏捷

2009年1月24日 2008年春,專案做的對敏捷有了點興趣,花了兩個晚上瀏覽了 敏捷迭代開發 管理者指南 理念式的書,看起來比較輕鬆,摘錄一些自己的體會。有些需求在開始的時候是提不出來的,或者說沒法細化的,強行的過渡需求分析是浪費時間的行為,到後來多半還是要改。瀑布 其實royce大大提出的瀑布模...

遞迴再理解

其實關於遞迴,我也是比較模糊的,至今能理解和能用的遞迴演算法,基本是靠記憶和經驗,要是讓我自己設計乙個遞迴,估計又得難半天,很早都想總結一下,喜歡瀏覽技術網 站,總是能找到好東西,現在將遞迴演算法總結如下,也不是多麼深刻,多麼高大上,可以說還是拙見吧 定義遞迴演算法 基本思想 那麼什麼是遞迴演算法呢...