Semaphore获取厕所坑位问题

转载 2016年05月31日 16:08:04
一个计数信号量。从概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。
Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。例如,下面的类使用信号量控制对内容池的访问:
这里是一个实际的情况,大家排队上厕所,厕所只有两个位置,来了10个人需要排队。
import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Semaphore;

public class MySemaphore extends Thread {
	private Semaphore position;
	private int id;

	public MySemaphore(int i, Semaphore s) {
		this.id = i;
		this.position = s;
	}

	public void run() {
		try {
			//有没有空厕所
			if (position.availablePermits() > 0) {
				System.out.println("顾客[" + this.id + "]进入厕所,有空位");
			}else {
				System.out.println("顾客[" + this.id + "]进入厕所,没空位,排队");
			}
			//获取到空厕所了
			position.acquire();
			System.out.println("顾客[" + this.id + "]获得坑位");
			//使用中...
			Thread.sleep((int) (Math.random() * 1000));
			System.out.println("顾客[" + this.id + "]使用完毕");
			//厕所使用完之后释放
			position.release();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String args[]) {
		ExecutorService list = Executors.newCachedThreadPool();
		Semaphore position = new Semaphore(2);//只有两个厕所
		//有十个人
		for (int i = 0; i < 10; i++) {
			list.submit(new MySemaphore(i + 1, position));
		}
		list.shutdown();
		position.acquireUninterruptibly(2);
		System.out.println("使用完毕,需要清扫了");
		position.release(2);
	}

}

相关文章推荐

生产者消费者问题Semaphore

http://www.cnblogs.com/steady/archive/2011/04/02/2003168.html /* productandconsumer. cpp */ #i...

【读书笔记】linux系统用semaphore来解决经典的生产者-消费者问题

在Linux系统下处理多进程或多线程的并发编程时,进程/线程同步是经常要遇到的问题。而在众多同步问题的场景中,生产者-消费者问题(Producer-Consumer Problem)是一个几乎每部涉及...
  • slvher
  • slvher
  • 2013-07-14 17:28
  • 1519

深入学习理解java:高效的解决死锁问题的线程通讯方式:Semaphore 和 BlockingQueue

经典原始问题:生产者和消费者的问题,其实在实际项目中很容易遇到这样的无奈的问题,但是面对这样的问题的时候我们首先想到的就是多线程批处理,通过notify()…………的处理,但只这样的处理只能给我们贴上...

关于厕所里的读书时间

//2011-11-09 15:38 关于厕所里的读书时间 这个话题我一直都想记录下,自从我08年某日在京广中心9楼男厕所里翻开了的第一页以后,每天的厕所时间变得无比的神圣而又有意义. 从那时起,...

腾讯笔试编程题--小Q上厕所

题目 小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢? 输入 输入包含多组测试数据。 对于每组测试数据: N - 本组测试数据有n个数...

微信小程序_厕所雷达

在 “微信小程序联盟” 看到了一个小demo,今天做来试试,主要还是为了练习一下 , “控件的基础使用” 和 “页面间的交互” ,创意很好玩,我就也写的比较带劲了,因为页面有好几个所以只上第一页的代码...

51智联等已成“厕所”,猎聘网建“会所”求突破

在经历了前程无忧上市、智联招聘和中华英才凋谢之后,国内招聘市场在相当长一段时间内被认为是“沉沦”的行业,不仅仅是产品、商业模式,市场也没有大的资本动作发生。 就在昨天下午,做为该市场的新军—猎聘...

Path关乎亲密无间:分享睡觉、起床、上厕所也不觉尴尬

新版Path一经推出就变得炙手可热,有文章说Path是地球上最精彩的Demo,用户已破百万。   Path与其他移动社交应用和传统社交网站有何不同?为什么新版一推出就如此受欢迎?   Path是一...

线程转换的过程---上厕所的过程. ++线程控制的基本方法

CUP就是一个公共大厕所.嗯,一个非常恰当的比喻......这里,自己稍微联想了一下上厕所的过程.呵呵.........         做了个图...仅供娱乐,如有雷同,纯属巧合........ ...

Shitter:把你的微博变成厕所卷纸

听到这名字的时候,是不是觉得不可思议?但Shitter确实就是这么一家独特的创业公司,能将你的微博变成厕所卷纸,送到你家门口。公司主页的口号就是“社交媒体从未如此丢弃自如”(Social medi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)