Akka併發程式設計 4 Actor模型 四)

2021-07-31 17:16:34 字數 3097 閱讀 8004

摘要:

本節主要內容: 1. 停止actor 

(1)通過actorsystem.shutdown方法停止該system下所有actor的執行

(2)通過context.stop方法停止actor的執行

(3)通過akka.actor.poisonpill訊息停止actor的執行

本節主要內容: 

停止actor

(1)通過actorsystem.shutdown方法停止所有 actor的執行

/*

*停止actor:actorsystem.shutdown方法

*/ import akka.actor.actor

import akka.actor.actorsystem

import akka.actor.props

class firstactor extends actor with actorlogging

override def poststop(): unit =

} class myactor extends actor with actorlogging

override def poststop(): unit =

} val system = actorsystem("myactorsystem")

val systemlog=system.log

//建立firstactor物件

val firstactor = system.actorof(props[firstactor], name = "firstactor")

systemlog.info("準備向firstactor傳送訊息")

//向firstactor傳送訊息

firstactor!"test"

firstactor! 123

//關閉actorsystem,停止所有acotr執行

system.shutdown()}

**執行結果:

(2)通過context.stop方法停止actor的執行

/*

*停止actor:context.stop方法

*/ import akka.actor.actor

import akka.actor.actorsystem

import akka.actor.props

class firstactor extends actor with actorlogging

}override def poststop(): unit =

} class myactor extends actor with actorlogging

override def poststop(): unit =

} val system = actorsystem("myactorsystem")

val systemlog=system.log

//建立firstactor物件

val firstactor = system.actorof(props[firstactor], name = "firstactor")

systemlog.info("準備向firstactor傳送訊息")

//向firstactor傳送訊息

firstactor!"test"

firstactor! 123

firstactor!"stop"

}

**執行結果:

注意程式中並沒有使用system.shutdown方法,因此不會使得整個程式全部停止,如下圖所示 

(3)通過akka.actor.poisonpill訊息停止actor的執行

/*

*停止actor:使用akka.actor.poisonpill

*/ import akka.actor.actor

import akka.actor.actorsystem

import akka.actor.props

import akka.actor.poisonpill

class firstactor extends actor with actorlogging

}override def poststop(): unit =

} class myactor extends actor with actorlogging

override def poststop(): unit =

} val system = actorsystem("myactorsystem")

val systemlog=system.log

//建立firstactor物件

val firstactor = system.actorof(props[firstactor], name = "firstactor")

systemlog.info("準備向firstactor傳送訊息")

//向firstactor傳送訊息

firstactor!"test"

firstactor! 123

firstactor!"stop"

}

**執行結果:

注意,其與第(2)中方法不同在於:不像第(2)種方法使用context.stop()。而是直接向子actor傳送表示中斷的訊息。(

akka.actor.poisonpill

此外,還有一種gracefulstop方法可以停止actor的執行,這部分內容等了解完future類的作用原理之後再來討論

Akka併發程式設計 5 Actor模型 五)

摘要 本將主要內容 1.訊息傳送,fire and forget訊息模型 2.訊息傳送,send and receive future訊息模型 akka提供了兩種訊息模型 fire and forget和send and receive future。fire and forget是一種單向訊息傳送...

Scala併發程式設計Demo(擴充套件Actor)

package com.zzk1 import scala.actors.actor atl enter導包 ctrl i 實現抽象方法 class actordemo extends actor case stop object test 第一步 建立actor例項 第二步 使用start啟動ac...

併發程式設計4

1 gil gil是乙個全域性直譯器鎖,是一種互斥鎖 乙個python.exe程序中只有乙份直譯器,如果職工程序開啟了多個執行緒都要執行 多執行緒之間要競爭直譯器,一旦競爭就會出現問題 gil帶來的問題是同一時間只有乙個執行緒可以訪問直譯器 好處是保證了多執行緒的資料安全 thread safe 執...