2011-03-12 133 views
0

讓我們假裝我有兩個線程在程序中運行。兩個線程都會到達一個節點(如樹或地圖中),在該節點中用戶必須輸入數據以便線程繼續。通常,如果節點是同步的,那麼首先到達該節點的任何線程都將等待輸入,同時阻止任何其他線程到達該節點。聚合線程和線程優先級(java)

的問題是:

是否有通過讓他闖過線程數1,以適應線程數兩(傢伙被鎖定)的方法嗎?此外,是否可以做到這一點,而不會導致線程1退出?

我已經知道你可以有一個輸入數據的時間限制,以便線程1在節點上停留時間過長,但是是否有可能讓線程2「通過」來說話?

別管傢伙,我想我明白了,我說我的問題很差,但謝謝你的嘗試。

+0

看來線程2 *需要*線程1正在等待的信息。那麼如果沒有這些信息,線程2 *如何繼續? – ChrisJ 2011-03-12 21:51:43

回答

0

爲什麼要鎖定(同步)等待輸入?

當您實際去修改多線程有權訪問的內容時,您應該只鎖定(同步)。

編輯:更清楚:唯一的原因,線#2要等的,如果:

A)它需要修改的東西,線#1被修改。 B)它依賴於(需要讀取)線程#1正在修改的內容。

否則,您的鎖定範圍過寬。

+0

對不起,我忘了提及輸入實際上是寫入文件。 – Alex 2011-03-12 21:52:53

+0

這是怎麼改變的?線程#2應該被阻塞的唯一原因是如果它試圖執行與線程#1相同的事情,或者需要讀取線程#1正在修改的內容。 – 2011-03-12 21:53:51

+0

它是,他們都在閱讀和修改相同的文件。 – Alex 2011-03-12 22:01:19

2

如果我的問題得到解答,答案是java.util.concurrent.locks.Lock.tryLock()。只需使用它而不是​​關鍵字。

0

我不是如何對其進行編碼的專家,但Java Concurrency In Practice涵蓋了這個確切的場景以及如何使用java.util.concurrent中的類構造它。這本書非常值得。

http://www.javaconcurrencyinpractice.com/