• 【原创】大叔经验分享(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来控制并发

  • 相关阅读:
    Crash dump中需要重点关注的信息
    导致性能问题的常见情况
    关于性能调优
    通过jdt解析spring mvc中url-类-方法的对应关系
    springcloud zuul
    spring中实现自己的初始化逻辑
    nginx配置文件解析工具
    mac 识别压缩文件类型
    使用JDT转java代码为AST
    word中插入的代码库设置局部背景色
  • 原文地址:https://www.cnblogs.com/barneywill/p/11070730.html
Copyright © 2020-2023  润新知