zoukankan      html  css  js  c++  java
  • 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都是一个线程,彼此之间基于消息实现并发编程,没有共享数据!

  • 相关阅读:
    C++设计模式-Bridge桥接模式
    解决VS2010打开Web页面时经常由于内存较低而导致VS2010自动关闭的问题
    Js继承小结
    MAC上的包管理利器
    Objective-C的hook方案(一): Method Swizzling
    OleContainer操作Excel以二进制方式读写数据库
    复制文件时,如何显示进度条(使用TFileStream一点一点读,或者使用BlockRead,并插入application.ProcessMessages)
    ADO异步查询显示进度条
    D2010 RTTI + Attribute 简单实现ORM
    Delphi默认窗体随想
  • 原文地址:https://www.cnblogs.com/yszd/p/10308540.html
Copyright © 2011-2022 走看看