Advertisement

Semaphone应用&源代码分析

阅读量:

Semaphone应用 &源码分析

3.1 Semaphore介绍

在Java编程中使用同步关键字sync来实现多态同步;确保ReentrantLock是一种互斥锁;防止多个线程在同一时间访问同一个资源。

Semaphore(信号量)保证1个或多个资源可以被指定数量的线程同时访问

底层实现是基于AQS去做的。

Semaphores本质上是基于AQS的状态属性来维护一个计数器。状态变量表示可用共享资源的数量。当一个线程试图获取1个或多个共享资源时,请先检查该状态下的可用共享资源数量:若足够,则对状态进行减一操作以获取所需的一个;若不足,则该线程需暂时搁置并等待。一旦某个拥有共享 resources 的线程完成任务并释放了其占用,则 Semaphore 的状态变量会被更新;被释放后的线程将被唤醒以便继续使用共享 resource。

Semaphore也分为公平和非公平的概念。

通过连接池对象的基础信号量即可实现相应的管理功能。在某些流量控制场景中,则可以通过设置相应的信号量来实现管理。例如,在迪士尼或环球影城等景点中每天都有固定的客流量,则可以设定一个具体的入园人数限制值,则最多可允许1万人入园。每当一名游客完成购票流程后,就需要对相应的信号量进行减一操作.当当前的系统状态达到零值或者资源已满时,则无法继续进行购票.

3.2

全部评论 (0)

还没有任何评论哟~