- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略
1.什么是Semaphore?
A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each acquire blocks if
necessary until a permit is available, and then takes it. Each release adds a permit, potentially releasing a
blocking acquirer. However, no actual permit objects are used; the Semaphore just keeps a count of the
number available and acts accordingly.
Semaphores are often used to restrict the number of threads than can access some (physical or logical)
resource.
上面是官方给予该类的介绍,信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。
举个例子,公共厕所只有3个位子,有10个人要上厕所.一开始3个位都是空的,那么将有3个人先后占得坑,其它人只要在外面等待.如果有一个人上完厕所,然后等待中的7人中将有一个可以去上厕所.也有可能同时有两人OK,那么也将会同时有两人补位.简单说就是你必须有空位了,才能去上厕所.
上厕所的例子虽不雅观,但令人印象深刻,本来想举ATM机取钱的例子的,但意思一样,还是举上厕所吧.
Semaphore的作用就是控制位置的分配,一般情况下位置的分配是随机的,可以在实例化对象时设置规则进行排序.
2.实例
先看效果:
?
?
再来看代码:
?
package com.amos.concurrent;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
/**
* @ClassName: SemaPhoreTest
* @Description: 线程通信中的信号灯
* @author: amosli
* @email:hi_amos@
* @date Apr 25, 2014 12:06:22 AM
*/
public class SemaPhoreTest {
public static void main(String[] args) {
ExecutorService threadPool = Executors.newCachedThreadPool();
final Semaphore semaphore=new Semaphore(3);
for(int i=0;i10;i++){
threadPool.execute(new Runnable() {
public void run() {
try {
semaphore.acquire();//获取一个可用的permits
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(线程 + Thread.currentThread().getName()+ 已进入. + 目前已经有+(3-semaphore.availablePermits())+ 个线程进入);
try {
Thread.sleep(new Random().nextInt(1000));
} catch (InterruptedException e) {
e.printStackTrace();
您可能关注的文档
- Galaxy MEGA如何截屏(I9152)Galaxy MEGA如何截屏(I9152).pdf
- GARP选股策略--成长与价值并重GARP选股策略--成长与价值并重.pdf
- Gabriela Braun-亚洲政府如何促进小额信贷_贷帮Gabriela Braun-亚洲政府如何促进小额信贷_贷帮.pdf
- GameUX_S05_面部表情自动识别技术及在游戏行业的应用_蔡达章GameUX_S05_面部表情自动识别技术及在游戏行业的应用_蔡达章.pdf
- GB50030氧气管线设计规范要求GB50030氧气管线设计规范要求.doc
- GB9242 消防广播主机-150W 说明书V1.0GB9242 消防广播主机-150W 说明书V1.0.pdf
- GB5237相关测试-沸水附着力试验的水斑和变色GB5237相关测试-沸水附着力试验的水斑和变色.ppt
- GBT50430-2007《规范》审核员内部考试模拟试题GBT50430-2007《规范》审核员内部考试模拟试题.pdf
- gcc链接脚本学习gcc链接脚本学习.doc
- gdal读写图像分块处理(精华版)gdal读写图像分块处理(精华版).doc
文档评论(0)