2013-04-16 34 views
2

有沒有Java中的Lock可以讓我做到這一點?當時最好的併發鎖定:一個WRITE和無限數量的READ

  • 一個寫操作
  • 讀操作的無限數量的(即使有獲得了WRITE鎖)
  • 可選的,但偉大的:鎖定超時 - 一會兒後釋放鎖永遠避免死鎖
+4

...它被稱爲鎖定寫入,並沒有讀取鎖定? – Xymostech

+0

@Xymostech是的,但仍然是讀操作必須能夠繼續,即使已經獲得了寫鎖定 – user219882

+0

我不明白爲什麼寫鎖定會阻止讀取發生。如果您在閱讀時根本不要求鎖定,則不會阻止您... – Xymostech

回答

1

聽起來好像沒有什麼情況下不能讀取。你真的需要讀鎖嗎?如果沒有,那麼你應該只能使用帶有1個許可證的Semaphore來保護寫入權限。如果您仍然想要追蹤有多少次讀取無法防止發生,您可以始終使用AtomicInteger來計算有多少讀取正在進行。

+0

你是對的。我不需要讀鎖。但是Semaphore看起來在超時後無法釋放許可證。 – user219882

+2

@Tomas我知道許多在獲取階段可能會超時的鎖,但我不知道任何在獲得後會自動釋放的鎖。你可能需要寫一些自定義的東西,但我覺得我應該強烈反對。如果您的任務運行時間超過了超時時間,您將*在多個寫入程序存在的情況下數據損壞。爲了避免死鎖,我認爲你最好注意一個沒有進展的狀態,然後[中斷](http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread。 html#interrupt%28%29)任務如果發生的話。 – sigpwned

+0

好的......謝謝 – user219882

相關問題