我必須在scala中實現阻塞和同步隊列。Scala阻塞隊列,正常等待
如果我沒有錯過什麼,同步是非常簡單的,但我的隊列會阻止我只能想到的(工作):
def pop() : T = {
this.synchronized
{
_read()
if(_out.isEmpty) throw new Empty()
val ret = _out.head
_out = _out.tail
_length -= 1
return ret
}
}
def waitPop() : T =
{
var ret : Option[T] = None
// Possibly wait forever
while(ret.isEmpty)
{
try { ret = Some(pop) }
catch { case e : Empty => Thread.sleep(1000) }
}
ret.get
}
這裏的問題是Thread.sleep
,它可以妥協表現,不是嗎? 當然,設置一個較低的值意味着消耗更多的CPU。 有沒有辦法等待正確?
謝謝。
我看了一下https://stackoverflow.com/questions/1107593/what-are-trade-offs-for-busy-wait-vs-sleep 但是,就我而言,調度程序不知道我在等什麼呢? –
你想使用'Object.wait'和'Object.notify'。 – Voo
謝謝,這就是我正在尋找的東西(我對所有這些未來和所有人都很難過)。 非常感謝! –