Semaphore

一個計數信號量。從概念上講,信號量維護了一個許可集。如有必要,在許可可用前會阻塞每一個 acquire(),然後再獲取該許可。每個 release() 添加一個許可,從而可能釋放一個正在阻塞的獲取者。但是,不使用實際的許可對象,Semaphore 只對可用許可的號碼進行計數,並採取相應的行動。

操作系統的信號量是個很重要的概念,在進程控制方面都有應用。Java 併發庫 的Semaphore 可以很輕鬆完成信號量控制,Semaphore可以控制某個資源可被同時訪問的個數,acquire()獲取一個許可,如果沒有就等待,而release()釋放一個許可。比如在Windows下可以設置共享文件的最大客戶端訪問個數。 

public class Test<T> {
	
	private final Set<T>  set;
	private final Semaphore semaphore;
	
	Test(int i){
		this.set=Collections.synchronizedSet(new HashSet<T> ());
		this.semaphore=new Semaphore(i);
	}
	
	public boolean add(T t) throws InterruptedException{
		semaphore.acquire();
		Boolean wasAdded=false;
		try {
			wasAdded=set.add(t);
			return wasAdded;
		} finally {
			if(!wasAdded)
				semaphore.release();
		}
	}
}
多線程調用add方法Semaphore可以控制某個資源可被同時訪問的個數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章