[英]Java Thread : Query regarding Thread waiting state
假設我有一個同步塊,並且說有1000個線程同時訪問該塊,而一個線程可以訪問同步塊。 其他999個線程將進入等待狀態,直到收到通知。 我想知道這999個線程恰好處於等待狀態。 在等待狀態期間以及通知它們后,將使用哪種數據結構來保存這999個線程,jvm如何選擇一個線程來訪問同步塊。 也是涵蓋線程同步和線程監視器的最佳文章。 我用谷歌搜索出來,但仍然對同步實際上如何在內部工作感到困惑。
謝謝
在Java線程中是用戶級線程 。 與內核級線程不同,這些線程由客戶端庫管理。 該庫負責處理這些線程的狀態。 例如,即使您的1000個線程中有10個線程正在處理10個不同的資源,並且其中1個線程進行了系統調用,則(該進程的)所有線程都相對於內核被阻止。 但是,對於用戶庫,只有一個進行系統調用的線程被阻止,而其他線程處於運行狀態。
同樣,也不保證哪個線程將獲得下一個鎖。 如果您想要公平,可以使用ReentrantLock ,它提供了比同步塊更多的功能。 它還具有一個可選的公平參數,如果設置為true,它將為等待時間最長的線程提供鎖定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.