2014-09-21 23 views
0

當我們說在Java中的一段代碼同步到一個對象鎖是什麼意思。在同步塊中的對象上獲取鎖

我的意思是,如果有我嘗試同步在完全不相干的類的對象,它具有無關的同步block.will線程使用的仍分別執行此代碼成員和變量是什麼? 我無法在我的系統上執行多線程場景,因爲它不能保證理想的輸出,所以請在sychronized(object)同步塊時告訴我應該使用什麼對象?

+0

'object'作爲**範圍**同步的一種方式。任何與'object'實例同步的東西都會共享這個監視器。 – 2014-09-21 13:18:25

+0

對啊。但如果我使用同步(xyx)其中xyz是與當前類無關的任何隨機類對象,那麼將不會有線程安全執行同步代碼? – 2014-09-21 13:49:53

回答

3

你都應該保護共享數據與鎖。這意味着將其封裝在訪問數據的類中,同時保持專用對象的鎖。

你不應該把它留給第三方的良好意願使用你的鎖。

+0

多數民衆贊成在罰款。但我將如何決定我應該鎖定哪個對象?它總是「這個」或其他一些對象。 – 2014-09-21 13:51:40

+0

@jayendrabhatt不,它並不總是這樣。您需要知道您正在保護哪些數據,並確保對該數據的任何訪問都受到同一鎖的保護。使用哪個對象與知道哪個對象是鎖並保持一致無關。 – 2014-09-21 15:50:24

+0

如果我用隨機obj鎖定一段代碼,那麼所有的東西都可以被保護(我的意思是什麼範圍的東西)。我知道我找不到適當的詞來提出這個問題:)。但請儘量回答 – 2014-09-21 16:15:25