zoukankan      html  css  js  c++  java
  • 【原创】大叔经验分享(73)scala akka actor

    import java.util.concurrent.{ExecutorService, Executors, TimeUnit}
    import akka.actor.{Actor, ActorSystem, Props}
    import akka.util.Timeout
    import scala.concurrent.{Await, ExecutionContext}
    import scala.concurrent.duration.Duration

    Runnable

    无返回值

      class TestActor extends Actor {
        def receive = {
          case arg => {
            println("got : " + arg)
            Thread.sleep(1000)
          }
        }
      }

    同步调用

    val system = ActorSystem("ActorSystem")
    val actor = system.actorOf(Props(new TestActor), "TestActor")
    actor ! "whatever"

    Callable

    有返回值

      class TestActor extends Actor {
        def receive = {
          case arg => {
            println("got : " + arg)
            Thread.sleep(1000)
            sender ! "hello : " + arg
          }
        }
      }

    异步调用

        val system = ActorSystem("ActorSystem")
    val actor = system.actorOf(Props(new TestActor), "TestActor")
        implicit val timeout = Timeout(10000, TimeUnit.SECONDS)
        import akka.pattern._
    
    //1 val feature
    = actor ? "whatever" while (!feature.isCompleted) Thread.sleep(1000) println(feature.isCompleted) if (feature.isCompleted) {println(feature.value.get.isSuccess + ", " + feature.value.get.get);}
    //2 println(Await.result(feature, Duration.create(
    1, TimeUnit.SECONDS)))

    更多

    并发控制

      val ec = ExecutionContext.fromExecutorService(Executors.newFixedThreadPool(100))
      val system = ActorSystem("ActorSystem", None, None, Option(ec))

    定时

        val system = ActorSystem("ActorSystem")
        system.scheduler.schedule(Duration.create(1, TimeUnit.SECONDS), Duration.create(1, TimeUnit.SECONDS))({
          println("trigger : " + System.currentTimeMillis)
        })(ec)

    注意Actor相当于java中的单实例单线程,可以通过多个Actor来控制并发

  • 相关阅读:
    利用列表的知识写一个购物小程序
    基本数据类型(While循环,For循环,列表以及相关用法)
    爬虫学习--Day3(小猿圈爬虫开发_1)
    爬虫学习--常用的正则表达式 Day3
    win10系统任务栏点击没有反应
    python 内建类型
    MWeb
    jmeter创建测试计划
    jmeter建立FTP测试计划
    jmeter配置元件
  • 原文地址:https://www.cnblogs.com/barneywill/p/11070730.html
Copyright © 2011-2022 走看看