Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略.doc

Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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();

您可能关注的文档

文档评论(0)

vshoulrengb3 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档