Scala Actor并发编程入门示例
生活随笔
收集整理的這篇文章主要介紹了
Scala Actor并发编程入门示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼
package cn.zxl.actorimport akka.actor.{Actor, ActorRef, ActorSystem, Props}/*** @description:* @author: zhangxueliang* @create: 2021-05-29 15:51* @version: 1.0* */ //當我們繼承 Actor 后,就是一個 Actor,核心方法 receive 方法重寫 class SayHelloActor extends Actor{//1. receive 方法,會被該 Actor 的 MailBox(實現了 Runnable 接口)調用//2. 當該 Actor 的 MailBox 接收到消息,就會調用 receive//3. type Receive = PartialFunction[Any, Unit]override def receive:Receive = {case "hello" => println("收到 hello, 回應 hello too:)")case "ok" => println("收到 ok, 回應 ok too:)")case "exit" => {println("接收到 exit 指令,退出系統")context.stop(self) //停止 actorefcontext.system.terminate()//退出 actorsystem}case _ => println("匹配不到")} } object SayHelloActorDemo {//1. 先創建一個 ActorSystem, 專門用于創建 Actorprivate val actoryFactory = ActorSystem("actoryFactory")//2. 創建一個 Actor 的同時,返回 Actor 的 ActorRef// 說明//(1) Props[SayHelloActor] 創建了一個 SayHelloActor 實例,使用反射//(2) "sayHelloActor" 給 actor 取名//(3) sayHelloActorRef:ActorRef 就是 Props[SayHelloActor] 的 ActorRef//(4) 創建的 SayHelloActor 實例被 ActorSystme 接管private val sayHelloActorRef: ActorRef =actoryFactory.actorOf(Props[SayHelloActor],"sayHelloActor")def main(args: Array[String]): Unit = {//給 SayHelloActor 發消息(郵箱)sayHelloActorRef ! "hello"sayHelloActorRef ! "ok"sayHelloActorRef ! "ok~"//研究異步如何退出 ActorSystemsayHelloActorRef ! "exit"} }pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zxl</groupId><artifactId>scala-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>scala-demo</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><encoding>UTF-8</encoding><scala.version>2.11.12</scala.version><scala.compat.version>2.11</scala.compat.version><akka.version>2.5.12</akka.version><!--已過時--><scala.actors.version>2.10.0-M6</scala.actors.version></properties><dependencies><!--scala依賴--><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>${scala.version}</version></dependency><!--scala 2.11起過時 無法使用--><!--<dependency><groupId>org.scala-lang</groupId><artifactId>scala-actors</artifactId><version>${scala.actors.version}</version></dependency>--><!--akka actor依賴--><dependency><groupId>com.typesafe.akka</groupId><artifactId>akka-actor_${scala.compat.version}</artifactId><version>${akka.version}</version></dependency><!--多進程之間的Actor通信--><dependency><groupId>com.typesafe.akka</groupId><artifactId>akka-remote_${scala.compat.version}</artifactId><version>${akka.version}</version></dependency></dependencies><build><!--指定源碼包和測試包的位置--><sourceDirectory>src/main/scala</sourceDirectory><testSourceDirectory>src/test/scala</testSourceDirectory><plugins><!-- 該插件用于將 Scala 代碼編譯成 class 文件 --><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.2</version><executions><execution><!-- 聲明綁定到 maven 的 compile 階段 --><goals><goal>compile</goal><goal>testCompile</goal></goals><configuration><args><arg>-dependencyfile</arg><arg>${project.build.directory}/.scala_depencencies</arg></args></configuration></execution></executions></plugin><!--maven打包的插件--><!--maven-assembly-plugin 和 maven-shade-plugin都是打包插件。遇到同名文件assembly是覆蓋,shade是追加。所以此處選擇shade插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.1</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>reference.conf</resource></transformer><!--指定main方法--><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>cn.zxl.spark.master.SparkMaster</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build> </project>運行結果
總結
以上是生活随笔為你收集整理的Scala Actor并发编程入门示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven-assembly-plugi
- 下一篇: Scala Akka网络编程:Clien