[问题] Thread 都在 Wait,你会怎么做?

楼主: lin1987www (林奕忠)   2014-05-21 19:27:39
以下挑战白话文解说
我固定请了5个员工,然后分配5个员工去从生产,而工厂的生产前,
必须有人去打开电源,才能使机械运作,才能开始生产。
若有1个员工要从事生产时,若发现电源没开的话,
就会请下一个员工,也就是第2名员工,去打开电源开关。
当我工厂要一口气生产4个产品的时候,就会一口气有4个人冲向机台,
等待开工,这时第5个人就会去打开电源开关。
很不幸的事,我一口气要生产5个产品的时候,就有5个人冲向机台,
但是没有人去打开电源,因为我一开始就说了,我只请5个员工 Orz
然后整个工厂就停工了 ...
◢▆▅▄▃崩╰(〒皿〒)╯溃▃▄▅▇◣
Thread 有办法限制说不会进行 wait吗?
或者变成 non-blocking 的形式有可能吗?
或者该怎么避免此问题的发生呢?
从描述可以看的出来勤俭持家的我是用
Executors.newFixedThreadPool
而不是用有钱人专用的 ( 大误 )
Executors.newCachedThreadPool
小弟我想请教 大大们都怎样解决这问题? Q"Q
作者: backforward ((● ω ●))   2014-05-21 19:39:00
sync
作者: kingofsdtw (不能閒下來!!)   2014-05-21 20:05:00
http://codepad.org/l9uxlGW8 (delay_time/user)
作者: kingofsdtw (不能閒下來!!)   2014-05-21 20:07:00
关键字setDelayTime
楼主: lin1987www (林奕忠)   2014-05-21 21:26:00
xd 简单的方式特地专用的Thread来处理,或者狂开Thread
楼主: lin1987www (林奕忠)   2014-05-21 21:30:00
谢谢1F2F的建议 xd 太抽象了
作者: luoqr (.....)   2014-05-21 21:38:00
发现没开开关就去开啊~管他是谁?
作者: bitlife (BIT一生)   2014-05-21 21:38:00
这从程式逻辑下手就好吧? 每个员工在冲向机台前,先检查电
作者: bitlife (BIT一生)   2014-05-21 21:39:00
源开否,若未开则进入critical section 开电源应该就OK了
作者: bitlife (BIT一生)   2014-05-21 21:41:00
如果电只能开一次,那就进临界区间后再检查一次是否己开
作者: pupuliao (pupu)   2014-05-22 02:49:00
为什么不能做成 当员工进入产线后 产线自动期动呢?
作者: qrtt1 (有些事,有时候。。。)   2014-05-22 08:03:00
为什么 setDelayTime 能解决问题!?
作者: kingofsdtw (不能閒下來!!)   2014-05-22 08:25:00
5张订单去塞爆一条A级产线,A级产线必须5倍速度@_@
作者: popcorny (毕业了..@@")   2014-05-22 09:11:00
我只是想说 "为什么发现没开要请下个员工开?"
作者: PsMonkey (痞子军团团长)   2014-05-22 10:17:00
我始终觉得 kingofsdtw 的各种思维都很微妙(又在酸人了btw.. 我觉得原 po 的白话文解说很棒 \囧/
作者: andymai (人生只有一次)   2014-05-22 13:04:00
"为何没开要请下个人开?"+1 限制5个又动5个~真的不奇怪吗?
作者: bestlong (bestlong)   2014-05-22 17:32:00
若强调职责区分就应该要一个工人专门开电
作者: lovdkkkk (dk)   2014-05-22 17:33:00
看起来可以用 listener 的方式 (随便谁开完电跟别人说)
作者: bestlong (bestlong)   2014-05-22 17:37:00
五个工人都上工后,也没工人去拿复工计画书吧
作者: bestlong (bestlong)   2014-05-22 18:05:00
既然工人都先上工,那就由老板负责开电吧

Links booklink

Contact Us: admin [ a t ] ucptt.com