synchronized鎖住的是實(shí)例中的代碼塊拌禾,一個線程進(jìn)入了其中一個synchronized取胎,其他線程可以進(jìn)入該實(shí)例中其他沒有synchronized修飾的代碼,但是不能進(jìn)入synchronized修飾的其他代碼湃窍。
一個類中如果有多個synchronized闻蛀,可以看成一個。(java是這樣設(shè)計(jì)的您市,很合理觉痛。
追加:加在方法命名前面的這個同步鎖,鎖住的不是當(dāng)前對象茵休,比如synchronized(this)薪棒、synchronized(object)這是鎖住對象。
)
1榕莺、synchronized關(guān)鍵字的作用域有二種:
1)是某個對象實(shí)例內(nèi)俐芯,synchronized aMethod(){}可以防止多個線程同時(shí)訪問這個對象的synchronized方法(如果一個對象有多個synchronized方法,只要一個線程訪問了其中的一個synchronized方法钉鸯,其它線程不能同時(shí)訪問這個對象中任何一個synchronized方法)泼各。這時(shí),不同的對象實(shí)例的synchronized方法是不相干擾的亏拉。也就是說扣蜻,其它線程照樣可以同時(shí)訪問相同類的另一個對象實(shí)例中的synchronized方法;
2)是某個類的范圍及塘,synchronized static aStaticMethod{}防止多個線程同時(shí)訪問這個類中的synchronized static 方法莽使。它可以對類的所有對象實(shí)例起作用。
2笙僚、除了方法前用synchronized關(guān)鍵字芳肌,synchronized關(guān)鍵字還可以用于方法中的某個區(qū)塊中,表示只對這個區(qū)塊的資源實(shí)行互斥訪問肋层。用法是: synchronized(this){/*區(qū)塊*/}亿笤,它的作用域是當(dāng)前對象;
3栋猖、synchronized關(guān)鍵字是不能繼承的净薛,也就是說,基類的方法synchronized f(){} 在繼承類中并不自動是synchronized f(){}蒲拉,而是變成了f(){}肃拜。繼承類需要你顯式的指定它的某個方法為synchronized方法;
新建兩個線程雌团,運(yùn)行同一個對象的不同方法燃领,測試synchronized對象監(jiān)視器。