[英]Scala mailboxsize is 0 after receiving 7 messages
我是Scala的新手,正在嘗試與actor了解多線程。 我寫了這段代碼,但我不理解某些行為。
package sum
import scala.actors.Actor._
object ActorTest extends App {
val caller = self
val firstActor = actor {
Thread.sleep(3000)
println("Messages in mailbox: " + mailboxSize)
receive {
case x => println("First actor received: " + x)
}
println("Messages in mailbox: " + mailboxSize)
}
for(i <- 1 to 7)
{
firstActor ! "Hello" + i
println("Message sent")
}
}
這是輸出:
Message sent
Message sent
Message sent
Message sent
Message sent
Message sent
Message sent
Messages in mailbox: 0
First actor received: Hello1
Messages in mailbox: 6
我不明白為什么第一次在郵箱中的消息為0,而第二次在郵箱中的消息為6,因為所有消息都是在線程休眠時發送的。 我想我誤會了。 有人可以給我解釋這種行為嗎?
謝謝
未經測試,大多是猜測。 我從沒用過Scala演員
我認為這是一個實施細節。 對我來說,尚不清楚何時執行傳遞給actor
函數的函數主體。
似乎只要您未定義recieve
功能,它就認為郵箱為空。 recieve
函數是異步執行的,因此我建議您從該函數中檢查郵箱。
val firstActor = actor {
receive {
case x =>
println("First actor received: " + x)
println("Messages in mailbox: " + mailboxSize)
}
Thread.sleep(3000)
println("Messages in mailbox: " + mailboxSize)
}
for(i <- 1 to 7)
{
firstActor ! "Hello" + i
println("Message sent")
}
我想上面的代碼將打印類似於此的內容:
Message sent
Message sent
Message sent
Message sent
First actor received: Hello2
Messages in mailbox: 4
Message sent
Message sent
First actor received: Hello1
Messages in mailbox: 6
...
Messages in mailbox: 6
請注意,輸出可能會大不相同,因為我無法預測角色系統以什么順序和速度處理消息。
正如其他人在評論中所說,與演員一起工作時,推薦的庫是Akka
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.