原文引用於 http://blog.csdn.net/lsshlsw/article/details/41515125
1 創建和啟動Actor
Tip1:
Actor的消息隊列會串行化消息。Actor運行在單個線程中,它會先接受一條消息,然后接收下一條。不用在Actor代碼中擔心爭用狀況。
Tip2:
Actor的act方法在start方法被調用時開始執行。如果act方法返回或是由於異常被終止或是actor調用exit方法,都會導致actor終止執行。
Tip3:
如果在receive方法被調用時並沒有消息,該調用會阻塞,直到有消息到達。如果發來的消息無法匹配,同樣會阻塞,等待下一個消息。
Tip4:
接受消息除了receive和react兩種方式還receiveWithin(5000),reactWithin(5000),其中的參數表示在5秒內沒收到信息將返回一個Actor.TIMEOUT對象。
結果:
2 與其他Actor通信
Tip1:
Actor可以構造成帶有指向一個或更多actor的引用。
Tip2:
Actor可以接受帶有指向另一個actor的引用的消息,在請求中提供一個actor引用非常常見。
Tip3:
Actor可以返回消息給發送方。Receive會把sender字段設為當前消息的發送方。
3 共享線程的Actor
Tip1:
盡可能的使用react,使用react的actor可以共享線程。只要消息處理器的工作是執行某個任務,然后退出,你就可以使用react。
Tip2:
每次對react的調用都會拋出異常,進行清棧。
4 同步消息
Tip1:
actor可以發送一個消息並等待回復,用!?操作符即可。
Tip2:
同步消息容易引發死鎖,最好避免使用。
5 FUTURE
Tip1:
!!操作符發送的消息會返回一個對象(future),該對象可以稍后處理,也可以發送給其他Actor。
Tip2:
如果立即就想從future接受返回的結果進行處理,就相當於是同步消息(!?)。
6 將多個Actor鏈接起來
Tip1:
如果你將兩個Actor鏈接在一起,雙方都會在另一個終止執行的時候得到通知。
Eg. 監管actor在數個工作actor中分發工作任務,當某個actor掛掉的時候,監管actor應該知道,重新指派工作或是重啟該actor。相應的,如果監管actor掛掉,actor也應該知道,以便停止工作。
Tip2:
當一個actor終止的時候,仍保留其內部狀態和郵箱(消息隊列)。如果要得到這些消息,可以調用該終止actor的restart方法。另外你還可以重新建立鏈接,因為一個actor終止時其鏈接會被移除。
Tip3:
當前actor連接到的actor中有一個以非正常(normal)原因退出。當前actor也會終止,退出原因和鏈接到的那個actor退出原因相同。如果你設置trapExit為true。修改后actor會接收到一個Exit類型的消息,該消息包含了退出原因和正在退出的actor。
運行結果: