2013-10-08 53 views
-1

是否有一種使用同步方法創建重入鎖機制的方法?可以使用同步方法在Java中實現重入鎖定機制

由於同步的方法不會讓2個線程一起進入臨界區,我認爲這是不可能的。任何人都可以提供一些見解嗎?

假設我將重入屬性擴展爲Reader-Writer問題,其中多個讀者可以鎖定同一對象,但Writer鎖是獨佔的。

我們可以使用同步方法實現此功能嗎?

回答

2

不知道我是否理解這個問題,但重入鎖是一個鎖,當您已經擁有它時可以獲得第二次鎖(而不是非重入鎖,它只會阻止那點)。

Java中的同步塊具有以下屬性:已經擁有鎖的線程可以輸入該塊。

如果沒有這個,就很難編寫正確的執行路徑,因爲你不可能有一個對象的同步方法調用另一個。

+0

我不認爲有任何特殊的需要一個同步的方法來調用另一個。事實上,如果沒有發生,這可能是一個好主意。 –

+1

@ TomHawtin-tackline爲什麼? – EJP

2

在下面的代碼

public class Foo { 
    public synchronized void bar() { 
     zoop(); 
    } 

    public synchronized void zoop() {} 
} 

如果Thread電話

Foo foo = new Foo(); 
foo.bar(); 

你有一個可重入鎖,因爲這Thread擁有Foo對象監視器,然後重新捕獲它時,它調用zoop()bar()

1

你不清楚你明白什麼是'重入'的實際含義。這意味着你可以重新獲得你已經擁有的鎖而不被阻塞。​​已具有重入屬性。

+0

「重入」一詞實際上來自「重入」的含義,因爲在另一個「線程」正在處理的同時,另一個「線程」可以重新輸入該方法。當我們沒有談論並行/併發執行,而是單核多線程系統時,它實際上已經被使用了。 – Gray