Scala併發編程Actor介紹
Actor介紹
scala的Actor併發編程模型可以用來開發比Java線程效率更高的併發程序。我們學習scala Actor的目的主要是爲後續學習Akka做準備。
Java併發編程的問題
在Java併發編程中,每個對象都有一個邏輯監視器(monitor),可以用來控制對象的多線程訪問。我們添加sychronized關鍵字來標記,需要進行同步加鎖訪問。這樣,通過加鎖的機制來確保同一時間只有一個線程訪問共享數據。但這種方式存在資源爭奪、以及死鎖問題,程序越大問題越麻煩。
線程死鎖
Actor併發編程模型
Actor併發編程模型,是scala提供給程序員的一種與Java併發編程完全不一樣的併發編程模型,是一種基於事件模型的併發機制。Actor併發編程模型是一種不共享數據,依賴消息傳遞的一種併發編程模式,有效避免資源爭奪、死鎖等情況。
Java併發編程對比Actor併發編程
Java內置線程模型 | scala Actor模型 |
---|---|
"共享數據-鎖"模型 (share data and lock) | share nothing |
每個object有一個monitor,監視線程對共享數據的訪問 | 不共享數據,Actor之間通過Message通訊 |
加鎖代碼使用synchronized標識 | |
死鎖問題 | |
每個線程內部是順序執行的 | 每個Actor內部是順序執行的 |
[!NOTE]
scala在2.11.x版本中加入了Akka併發編程框架,老版本已經廢棄。Actor的編程模型和Akka很像,我們這裏學習Actor的目的是爲學習Akka做準備。