首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

应用Lock实现信号量

2013-09-06 
使用Lock实现信号量public class SemaphoreOnLock{private final Lock lock new ReentrantLock()privat

使用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();
        }
       
    }
}

热点排行