信号量可以看做是对锁的扩展,锁限制了一次只有一个线程能获取共享资源,而信号量却可以使多个线程访问同一资源。
Semaphore的构造函数有:
public Semaphore(int permits);
public Semaphore(int permits, boolean fair);
permits指定最多能有多少个线程访问信号量,fair是指定是否公平。
信号量的逻辑方法:
public void acquire(); 获取资源,可响应中断。
public void acquire()UnInterruptibly(); 获取资源,不响应中断。
public boolean tryAcquire();尝试获取资源,若没有获取到直接返回,不等待。
public boolean tryAcquire(long timeout, TimeUnit unit); 在参数指定的时间内尝试获取资源。
public void release(); 释放资源。