Java信號量_Semaphore

Java信號量_Semaphorejava

計數信號量(Counting Semaphore)用來控制同時訪問某個特定資源的操做數量,或者同時執行某個指定操做的數量。計數信號量還能夠用來實現某種資源池,或者對容器施加邊界。函數

Semaphore中管理着一組虛擬的許可(permit),許可的初始數量可經過構造函數來指定。在執行操做時,能夠首先得到許可(只要還有剩餘的許可),並在使用之後釋放許可。ui

若是沒有許可,那麼acquire將阻塞直到有許可(或者直到被中斷或者操做超時)。release方法將返回一個許可給信號量。計算信號量的一種簡化形式是二值信號量,即初始值爲1的Semaphore。二值信號量能夠用來作互斥體,並具有不可重入的加鎖語義:誰擁有這個惟一的許可,誰就擁有了互斥鎖。this

示例代碼:spa

package com.lyx;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Semaphore;

public class BoundHashSet<T> {
	private final Set<T> set;
	private final Semaphore semaphore;

	public BoundHashSet(int bound) {
		this.set = Collections.synchronizedSet(new HashSet<T>());
		this.semaphore = new Semaphore(bound);
	}

	public boolean add(T o) throws InterruptedException {
		this.semaphore.acquire();
		boolean wasAdded = false;
		try {
			wasAdded = this.set.add(o);
			return wasAdded;
		} finally {
			if (!wasAdded) {
				this.semaphore.release();
			}
		}
	}

	public boolean remove(Object o) {
		boolean wasRemoved = this.set.remove(o);
		if (wasRemoved) {
			this.semaphore.release();
		}
		return wasRemoved;
	}

}

=============END=============code

相關文章
相關標籤/搜索