[問題] 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