读书人

通过Se地图hore实现并发个数控制

发布时间: 2012-09-02 21:00:34 作者: rapoo

通过Semaphore实现并发个数控制

?

Semaphore可以控制某个资源可被同时访问的个数,acquire()获取一个许可,如果没有就等待,而release()释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。

另外重入锁ReentrantLock也可以实现该功能,但实现上代码也要复杂些。


SemaPhore,一个信号量对象,可以定义信号量的个数,通过该信号量控制线程同步的数量。例如我们只允许同步三个线程进入共享资源,其它线程都阻塞。

好比,厕所有三个坑,十个人进去,每次只能进去三个。采用信号灯来实现。

其优势为可以被其它线程唤醒,如果使用互斥锁,那么一旦出现异常,该锁将不会释放,该锁只能由自己释放。比如:一个人上厕所,如果采用互斥锁,那么当该人晕倒在厕所时,这个厕所就不能被使用了。如果使用信号灯互斥,那么能够找到物业人员打开厕所,救人并接着使用。

??结果:

?

线程pool-1-thread-2进入,当前已有2个并发

线程pool-1-thread-3进入,当前已有3个并发

线程pool-1-thread-1进入,当前已有2个并发

线程pool-1-thread-3即将离开

线程pool-1-thread-4进入,当前已有3个并发

线程pool-1-thread-3已离开,当前有3个并发

线程pool-1-thread-2即将离开

线程pool-1-thread-2已离开,当前有2个并发

线程pool-1-thread-7进入,当前已有3个并发

线程pool-1-thread-1即将离开

线程pool-1-thread-5进入,当前已有3个并发

线程pool-1-thread-1已离开,当前有3个并发

线程pool-1-thread-4即将离开

线程pool-1-thread-4已离开,当前有2个并发

线程pool-1-thread-6进入,当前已有3个并发

线程pool-1-thread-7即将离开

线程pool-1-thread-7已离开,当前有2个并发

线程pool-1-thread-6即将离开

线程pool-1-thread-6已离开,当前有1个并发

线程pool-1-thread-5即将离开

线程pool-1-thread-5已离开,当前有0个并发


参考:http://blog.csdn.net/lb85858585/article/details/7273561

JDK:http://www.cjsdn.net/doc/jdk50/java/util/concurrent/Semaphore.html#availablePermits()

?

?

读书人网 >编程

热点推荐