我在Java的MultiThreading概念上很窮。ReentrantLock使用案例
我正在通過ReentrantLock的功能和用法。 我知道它更靈活,然後同步並添加了更多功能。
我可以看到它上面提到的例子,我把它弄好了。
我無法弄清楚真正的時間場景,它對商業有什麼幫助。
我可以看到,最好避免死鎖。
有人可以提供沒有ReentrantLock的用例將很難解決這種用例。
或者可以指向一些鏈接將會有所幫助。
我在Java的MultiThreading概念上很窮。ReentrantLock使用案例
我正在通過ReentrantLock的功能和用法。 我知道它更靈活,然後同步並添加了更多功能。
我可以看到它上面提到的例子,我把它弄好了。
我無法弄清楚真正的時間場景,它對商業有什麼幫助。
我可以看到,最好避免死鎖。
有人可以提供沒有ReentrantLock的用例將很難解決這種用例。
或者可以指向一些鏈接將會有所幫助。
對於一個簡單的情況,如何爲需要性能的應用程序定時鎖定或部分鎖定。
一個非常常見的例子是在線門戶,它讓你購買/預訂門票(任何)。您對您感興趣的座位/資源獲取定時鎖。在時間到期後,如果事務未完成,則任何其他客戶端應用程序(線程)都可以獲取鎖定。
不錯,只是因爲好奇心我問的是紅色的巴士/ bookmyshow還是以這種方式爲座位發生任何預訂? – Jayesh
我不會說他們的代碼庫是用Java編寫的,他們使用ReentrantLock進行同步,但機制很相似。 –
[ReentrantLock](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html)中沒有任何方法可以讓我鎖定一段時間我有選擇在有限的時間內嘗試鎖定,那麼ReentrantLock如何提供時間鎖定用例?我誤解了任何東西嗎? –
ReentrantLock
可用於超時要求。假設您正在嘗試獲取鎖定,但鎖定已經在該時間點被使用,您可以使用tryLock()
,這將立即返回,稍後您可以再次嘗試。
ReentrantLock
有被它的配置結構提供fairLock或不公平的一些其他優勢:
public ReentrantLock(boolean fair)
如果你把fair
爲false
比它不會爲您提供公平訂購鎖。並且不公平訂購出現公平鎖定。如果你需要更多的細節,我可以解釋一下。
但ReentrantLock
的問題是,它很難調試,因爲在日誌中它無法解釋有關鎖的所有者,但在同步它是可能的。這是最大的缺點。
您可以使用此鎖定機制實現像就餐哲學家之類的功能。如果兩根棍子都可用,則繼續進食,然後吃掉其中的一根即可。
public void run() {
while (!Thread.currentThread().isInterrupted()) {
if (l.getLeftLock().tryLock()) {
try {
if (r.getRightLock().tryLock()) {
try {
System.out.println("Eating philosopher1 !!!!");
} finally {
r.getRightLock().unlock();
}
}
} finally {
l.getLeftLock().unlock();
}
}
try {
Thread.currentThread().sleep((int) (100 * Math.random()));
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
看看:https://stackoverflow.com/a/1312282/668951 另外,在我來說,我在Henry Wong's book雖然沒有讀到它非常詳細。
對於ReentrantLock
類,而在我看來平淡的主要優點是:在不同的塊
而且,有點離題,但對理解Java併發類,我發現Java Concurrent Animated非常有用。下載可運行jar文件並查看你的自我。
我正在問現實生活中的用例(場景),它必須使用這種鎖定,並且同步將無助於這種情況。我知道ReentrantLock的功能。 – Jayesh