java實現信號量


       本文介紹的Semaphore實現基於synchronized,wait()和notify/notifyAll(),這是java並發包之前的典型實現方式.在eclipse的源碼中可以找到不少這樣的案例,下文中也會把eclipse中的幾個實現類作為案例以分析之.

       注,這里介紹的信號量實現是基於java語言機制,用於實現多線程間的同步操作,所以對S,P(S),V(S)等概念的介紹將結合本文內容,做合適的調整,讀者可閱讀操作系統相關書籍的信號量章節獲取標准定義.

 

*本文內容

---信號量簡介

---典型案例

 

*Semaphore概述

---通常把一個非負整數稱為Semaphore,表示為S.

S可以理解為可用的資源數量.這里不涉及進程問題,所以就假定S>=0.

---S實現的同步機制表示為PV原語操作

P(S):若S=0,線程進入等待隊列;否則,—S;

V(S):++S,喚醒處於等待中的線程.

(注,P是荷蘭語的Passeren,相當於英文的pass, V是荷蘭語的Verhoog,相當於英文中的incremnet).

 

*案例

1)典型實現

這段程序源自ibm的一本並發書籍,實現了計數信號量{S|S∈{0,N}}和二元信號量(S={0,1})

S示例

2)實現讀寫鎖

eclipse使用它,解決日志操作相關類在map,數組中的同步問題.

ReadWriteLock

3)延遲信號量

這個信號量的亮點在acquire(long delay).

靈活的Semaphore

 

 

*總結

---通過java的對象鎖,wait/notify機制模擬的信號量,可以呈現多種形態以應對各種的互斥需求.

---本文給出的例子,具有普遍的適用性.在實踐中,咱們可以根據需求定制各種信號量實現.

---jdk1.5提供了Semaphore的另一種實現機制.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM