我们假设有一个理发师和一个顾客。理发师睡到五个顾客到来,当第五个顾客醒来理发师,他开始做他的工作。
序列顺序是这样的:唤醒 - >如果有空间(最多5人)并等待轮到您,请坐在理发店内 - >坐在椅子上 - >支付 - >如果你是最后一个顾客,没有人在里面/外面等待理发师睡着了。
如何处理此问题?
我的尝试:http://pastebin.com/G0CzJBVG
然而,它有缺陷。
答案 0 :(得分:0)
根据您的描述,一旦理发师醒来就开始为顾客剪头发,并且必须在进入下一个之前完成第一个,所以你需要一个机制来确保客户按顺序处理他们来了。此外,在他工作的时候,其他顾客可能会来,他也不会停下来睡觉,直到理发店里没有人。
我的建议如下:
ArrayBlockingQueue
,当客户来到理发店时,第二个帖子会不断添加元素CountDownLatch(5)
,第二个线程正在调用countDown()
,但仅限{{1}第一个线程在开始从getCount() != 0
await()
ArrayBlockingQueue
并调用countDownLatch(5)
阻塞直到队列又满了。await()
。我希望它能解决你的问题。