[英]converging threads and thread priority (java)
讓我假裝我有兩個線程在程序中運行。 兩個線程都到達一個節點(如樹或地圖中),用戶必須在該節點中輸入數據才能繼續線程。 通常,如果節點是同步的,則首先到達該節點的任何線程將等待輸入,同時阻止任何其他線程到達該節點。
問題是:
有沒有辦法通過讓他超過1號線來容納2號線(被鎖定的那個人)? 另外,是否可以在不導致線程1退出的情況下執行此操作?
我已經知道你可以有一個輸入數據的時間限制,這樣如果線程1在節點上停留的時間太長,那么線程1就會被關閉但可以說線程2可以“通過”嗎?
別介意我,我想我弄清楚了,我的問題很糟糕,但感謝你的努力。
如果我的問題是正確的,答案是java.util.concurrent.locks.Lock.tryLock()
。 只需使用它而不是synchronized
關鍵字。
為什么要鎖定(同步)等待輸入?
您應該只在實際修改多線程有權訪問的內容時鎖定(同步)。
編輯:更清楚:線程#2應該等待的唯一原因是:
A)它需要修改#1正在修改的線程。
B)它依賴於(需要讀取)線程#1正在修改的東西。
否則,您的鎖定范圍太寬。
我不是如何編寫代碼的專家,但Java Concurrency In Practice涵蓋了這個確切的場景以及如何使用java.util.concurrent中的類來構造它。 這本書物有所值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.