锁的机制从整体的运行转态来讲核心就是:阻塞,解除阻塞,但是如果仅仅是这点功能,那么JUC并不能称为一个优秀的线程开发框架,然而是因为在juc里面提供了大量方便的同步工具辅助类。
Semaphore信号量
Semaphore通常用于限制可以访问某些资源(物理or逻辑)的线程数目。
例如,大家排队去银行办理业务,但是只有两个银行窗口提供服务,来了10个人需要办理业务,所以这10个排队的人员需要依次使用这两个业务窗口来办理业务。
观察Semaphore类的基本定义:
public class Semaphore extends Object implements Serializable
Semaphore类中定义的方法有如下几个:
构造方法:
public Semaphore(int premits),设置服务的信号量;
构造方法:
public Semaphore(int premits,boolean fair) ,是否为公平锁;
等待执行:
public void acquireUninterruptibly(int permits)
设置的信号量上如果有阻塞的线程对象存在,那么将一直持续阻塞状态。
释放线程的阻塞状态:
public void release(int permits);
返回可用的资源个数:
public int availablePermits();
范例:实现银行排队业务办理
网友评论