Scala并发编程【快速入门】

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
View Code

4.分析

  Actor消息机制使用start开启,这和java类似,每一个start都是一个线程,彼此之间基于消息实现并发编程,没有共享数据!

原文地址:https://www.cnblogs.com/yszd/p/10308540.html