2011-02-02 91 views
0

如果正在運行的線程訪問特定對象,因此它也鎖定該特定對象的字段成員?Java線程鎖

+3

你的問題是什麼? – 2011-02-02 17:57:56

+3

我認爲答案是否定的,但在你形成一個連貫的問題之前,我不會發表一個答案。也可能有很多回答的問題已經提出了相同的問題。 – 2011-02-02 17:58:53

回答

5

你是否顯式鎖定對象?你在使用​​嗎?

鎖定對象並不意味着鎖定其成員。

0

如果您正在鎖定有問題的對象,那麼另一個線程顯然無法獲得該鎖,但這不會限制字段成員的更改或修改。

1

同步建立在一個內部實體周圍,這個實體被稱爲內部鎖或監視器鎖。 (API規範通常將此實體簡稱爲「監視器」。)在同步的兩個方面(強制對象狀態的獨佔訪問和建立發生)之前,內部鎖都起作用,而這些關係對於可見性至關重要。

1

鎖只是一個鎖,它保證了唯一的事情就是隻有一個線程一次可以擁有它。編寫代碼確保您想要鎖定的內容實際上處於鎖定狀態由您決定。

所以,如果你寫:

class MyClass { 
    private int myvalue; 
    public synchronized void setValue(int newvalue) { 
    myvalue = newvalue; 
    } 
} 

然後可以確保只有一個線程一次可以寫入myvalue的。但是,如果您要公開myvalue或提供另一種寫入方式,則不會阻止其他線程同時寫入myvalue。編碼的邏輯取決於你。