信号量Semaphore介绍

java.util.Concurrent.Semaphore,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。java并发库的Semaphore可以轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过acquire()获取一个许可,如果许可用完线程阻塞,而release()释放一个许可。

Semaphore类似厕所有5个坑,假如10个人上厕所,只能同时进去5个,后面想进去必须要有人现出来。

另外如果出来一个人,那等待的人谁先进也有说法。如果调用构造方法Semaphore(num,true),那相当于5个人在外面排队,有人出来队头的先进去,这个排队先后就是每个线程调用acquire()方法的先后(估计内部用queue实现没看源码)。如果输入参数为false或直接调用构造方法Semaphore(num)则等同,5个人在外面不排队一有人出来就抢着上。

单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是一个线程获得“锁”,另一个线程释放“锁”,更灵活

猜你喜欢

转载自xiaoxiaoher.iteye.com/blog/2367550