Semaphone应用&源代码分析
发布时间
阅读量:
阅读量
Semaphone应用 &源码分析
3.1 Semaphore介绍
在Java编程中使用同步关键字sync来实现多态同步;确保ReentrantLock是一种互斥锁;防止多个线程在同一时间访问同一个资源。
Semaphore(信号量)保证1个或多个资源可以被指定数量的线程同时访问
底层实现是基于AQS去做的。
Semaphores本质上是基于AQS的状态属性来维护一个计数器。状态变量表示可用共享资源的数量。当一个线程试图获取1个或多个共享资源时,请先检查该状态下的可用共享资源数量:若足够,则对状态进行减一操作以获取所需的一个;若不足,则该线程需暂时搁置并等待。一旦某个拥有共享 resources 的线程完成任务并释放了其占用,则 Semaphore 的状态变量会被更新;被释放后的线程将被唤醒以便继续使用共享 resource。
Semaphore也分为公平和非公平的概念。
通过连接池对象的基础信号量即可实现相应的管理功能。在某些流量控制场景中,则可以通过设置相应的信号量来实现管理。例如,在迪士尼或环球影城等景点中每天都有固定的客流量,则可以设定一个具体的入园人数限制值,则最多可允许1万人入园。每当一名游客完成购票流程后,就需要对相应的信号量进行减一操作.当当前的系统状态达到零值或者资源已满时,则无法继续进行购票.
3.2
全部评论 (0)
还没有任何评论哟~
