簡體   English   中英

收斂線程和線程優先級(java)

[英]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中的類來構造它。 這本書物有所值。

http://www.javaconcurrencyinpractice.com/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM