读书人

应用Lock实现信号量

发布时间: 2013-09-06 10:17:17 作者: rapoo

使用Lock实现信号量
public class SemaphoreOnLock
{
private final Lock lock = new ReentrantLock();

private final Condition permitsAvailable = lock.newCondition();

private int permits;

SemaphoreOnLock(int initialPermits)
{
lock.lock();

try
{
permits = initialPermits;
}
finally
{
lock.unlock();
}
}

public void acquire()
throws InterruptedException
{
lock.lock();

try
{
while (permits <= 0)
{
permitsAvailable.await();
}

--permits;
}
finally
{
lock.unlock();
}
}

public void release()
{
lock.lock();

try
{
++permits;
permitsAvailable.signal();
}
finally
{
lock.unlock();
}

}
}

读书人网 >编程

热点推荐