簡體   English   中英

帶鎖的Java多線程同步

[英]Java Multihreading Synchronization with Lock

在Java中,我們可以通過使用Lock接口和ReentrantLock類來實現公平性,如下所示:

Lock lock=new ReentrantLock(true);

一旦我們實現公平性,那么在多個線程等待訪問鎖的情況下,等待大多數持續時間的那個被授予對鎖的訪問權。

任何人都可以提供JVM如何跟蹤線程等待很長時間的細節,即JVM如何實現公平性。

詳細信息在源代碼中。 Googling可以找到源代碼:

  • “java.util.concurrent.locks.ReentrantLock source”
  • “java.util.concurrent.locks.AbstractQueuedSynchronizer source”

該代碼得到了極好的評論。

簡短的回答是每個鎖都有一個等待線程的隊列,它被實現為一個鏈表。

  • 在“公平”情況下,在隊列非空時嘗試獲取鎖的線程被添加到隊列的末尾。

  • 在“不公平”的情況下,如果鎖當前是空閑的,則線程可能會插入。 這樣可以提供更好的性能,因為您不需要執行需要系統調用的線程上下文切換。

暫無
暫無

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

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