1.简介
Scala的actor提供了一种基于事件的轻量级线程。只要使用scala.actors.Actor伴生对象的actor()方法,就可以创建一个actor。它接受一个函数值/闭包做参数,一创建好就开始运行。用!()方法给actor发消息,用receive()方法从actor接收消息。receive()也可以闭包为参数,通常用模式匹配处理接收到的消息。
scala提供了一种完全有别于java的并发实现,那就是Actor消息机制。不像java那样基于共享数据和锁的机理,scala基于消息实现并发,没有共享数据。
2.代码快速入门
1 package com.dingxin.entrance 2 3 import scala.actors.Actor 4 /** 5 * scala并发编程 6 * 基于Actor消息机制,适用于scala2.10及之前版本,新版本使用akka 7 * Created by zhen on 2019/1/22. 8 */ 9 10 object Left_Actor extends Actor{ 11 def act(){ 12 for(i <- 1 to 10){ 13 println(Thread.currentThread().getName + " step : " + i) 14 Thread.sleep(1000) 15 } 16 } 17 } 18 object Right_Actor extends Actor{ 19 def act(){ 20 for(i <-1 to 10){ 21 println(Thread.currentThread().getName + " step : " + i) 22 Thread.sleep(1000) 23 } 24 } 25 } 26 object My_Actor { 27 def main(args: Array[String]) { 28 // 启动消息机制 29 Left_Actor.start() // 每个都是一个线程 30 Right_Actor.start() 31 } 32 }
3.结果
ForkJoinPool-1-worker-13 step : 1 ForkJoinPool-1-worker-11 step : 1 ForkJoinPool-1-worker-11 step : 2 ForkJoinPool-1-worker-13 step : 2 ForkJoinPool-1-worker-11 step : 3 ForkJoinPool-1-worker-13 step : 3 ForkJoinPool-1-worker-13 step : 4 ForkJoinPool-1-worker-11 step : 4 ForkJoinPool-1-worker-11 step : 5 ForkJoinPool-1-worker-13 step : 5 ForkJoinPool-1-worker-13 step : 6 ForkJoinPool-1-worker-11 step : 6 ForkJoinPool-1-worker-11 step : 7 ForkJoinPool-1-worker-13 step : 7 ForkJoinPool-1-worker-13 step : 8 ForkJoinPool-1-worker-11 step : 8 ForkJoinPool-1-worker-13 step : 9 ForkJoinPool-1-worker-11 step : 9 ForkJoinPool-1-worker-11 step : 10 ForkJoinPool-1-worker-13 step : 10
4.分析
Actor消息机制使用start开启,这和java类似,每一个start都是一个线程,彼此之间基于消息实现并发编程,没有共享数据!