美文网首页
actor概念

actor概念

作者: lehuai | 来源:发表于2018-01-03 16:43 被阅读0次
    
    为什么学习Actor?
        我们现在学的Scala Actor是scala 2.10.x版本及以前版本的Actor。
        Scala在2.11.x版本中将Akka加入其中,作为其默认的Actor,老版本的Actor已经废弃。
        我们学习Actor的目的就是为了学习Akka做铺垫。
    
    什么是Actor?
        Actor是消息并发模型。
        Scala中的Actor能够实现并行编程的强大功能,它是基于事件模型的并发机制。
        Scala是运用消息(message)的发送、接收来实现多线程的。
        使用Scala能够更容易地实现多线程应用的开发。
        
    Java并发编程与Scala Actor编程的区别
        Scala的Actor类似于Java中的多线程编程。但是不同的是,Scala的Actor提供的模型与多线程有所不同。
        Scala的Actor尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争用的情况,进而提升多线程编程的性能。
        此外,Scala Actor的这种模型还可以避免死锁等一系列传统多线程编程的问题。
        原因就在于Java中多数使用的是可变状态的对象资源,对这些资源进行共享来实现多线程编程的话,
        控制好资源竞争与防止对象状态被意外修改是非常重要的,而对象状态的不变性也是较难以保证的。
        而在Scala中,我们可以通过复制不可变状态的资源(即对象,Scala中一切都是对象,连函数、方法也是)的一个副本,
        再基于Actor的消息发送、接收机制进行并行编程。
    
    Actor方法执行顺序
        1.调用start()方法启动Actor
        2.执行act()方法
        3.向Actor发送消息
        
    发送消息的方式
        ! --> 发送异步消息,没有返回值。
        !? --> 发送同步消息,等待返回值。
        !! --> 发送异步消息,返回值是 Future[Any]。
    
    掌握的内容:
        1、创建Actor
        2、Actor的消息接受和发送
        3、用Actor并发编程实现WordCount
    
    ActorDemo.scala
    package day05
    
    import scala.actors.Actor
    
    object ActorDemo1 extends Actor{
      // 重写act方法
      override def act(): Unit = {
        for (i <- 1 to 20 ) {
          println("actor1:" + i)
          Thread.sleep(1000)
        }
      }
    }
    object ActorDemo2 extends Actor{
      override def act(): Unit = {
        for (i <- 1 to 20 ) {
          println("actor2:" + i)
          Thread.sleep(1000)
        }
      }
    }
    
    object ActorTest {
      def main(args: Array[String]): Unit = {
        // 启动Actor
        ActorDemo1.start()
        ActorDemo2.start()
      }
    }
    

    相关文章

      网友评论

          本文标题:actor概念

          本文链接:https://www.haomeiwen.com/subject/gpahnxtx.html