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来控制并发

【原创】大叔经验分享(73)scala akka actor的更多相关文章

  1. 【原创】经验分享:一个小小emoji尽然牵扯出来这么多东西?

    前言 之前也分享过很多工作中踩坑的经验: 一个线上问题的思考:Eureka注册中心集群如何实现客户端请求负载及故障转移? [原创]经验分享:一个Content-Length引发的血案(almost.. ...

  2. 【原创】大叔经验分享(17)编程实践对比Java vs Scala

    scala 官方地址 https://www.scala-lang.org/ 本文尽可能包含了一些主要的java和scala在编程实践时的显著差异,展现scala的代码的简洁优雅:scala通吃< ...

  3. 【原创】大叔经验分享(90)linux服务器iowait和负载很高

    # top top - 21:21:51 up 207 days, 1:30, 5 users, load average: 0.90, 0.79, 1.62 Tasks: 249 total, 1 ...

  4. 【原创】大叔经验分享(86)hive和mysql数据互导

    hive和mysql数据互导,首先想到的是sqoop,并且可以和调度框架(比如oozie等)配合配置定时任务,还有一种更简单的方式是通过spark-sql: CREATE OR REPLACE TEM ...

  5. 【原创】大叔经验分享(71)docker容器中使用jvm工具

    java应用中经常需要用到jvm工具来进行一些操作,如果java应用部署在docker容器中,如何使用jvm工具? 首先要看使用的docker镜像, 比如常用的openjdk镜像分为jdk和jre,只 ...

  6. 【原创】大叔经验分享(70)marathon重启app后一直处于waiting状态

    marathon重启app后一直处于waiting状态,查看marathon日志 # journalctl -u marathon -f 有如下日志: Jun 14 12:58:38 DataOne- ...

  7. 【原创】大叔经验分享(55)spark连接kudu报错

    spark-2.4.2kudu-1.7.0 开始尝试 1)自己手工将jar加到classpath spark-2.4.2-bin-hadoop2.6+kudu-spark2_2.11-1.7.0-cd ...

  8. 【原创】大叔经验分享(51)docker报错Exited (137)

    docker container启动失败,报错:Exited (137) *** ago,比如 Exited (137) 16 seconds ago 这时通过docker logs查不到任何日志,从 ...

  9. 【原创】大叔经验分享(50)hue访问mysql(librdbms)

    cloudera manager安装hue后想开启访问mysql(librdbms)需要在这里配置(hue_safety_valve.ini) 添加配置如下 [librdbms] # The RDBM ...

随机推荐

  1. 第11组 Alpha冲刺(1/6)

    队名 不知道叫什么团队 组长博客 组长博客 作业博客 https://edu.cnblogs.com/campus/fzu/SE_FZU_1917_K/homework/9938 项目情况 燃尽图 陈 ...

  2. ArcGIS Python获得一个图层所有线长

    import arcpy # Create an empty Geometry object # g = arcpy.Geometry() # Run the CopyFeatures tool, s ...

  3. [go]mysql使用

    mysql驱动使用 初始化 import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) DB, e ...

  4. SSH整合入门案例

    package loaderman.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import ...

  5. 微信小程序:undefined Expecting 'STRING', got INVALID

    出现问题: 问题原因:app.json中不能出现注释

  6. [PySpark] Spark SQL on a large file

    基础篇:[Spark] 03 - Spark SQL /* implement */

  7. DevOps - CI&CD

    1 - CI与CD的联系与区别 持续集成(Continuous Integration).持续交付(Continuous Delivery)和持续部署(Continuous Deployment)的过 ...

  8. 2019 Unreal Open Day —— 英特尔携手 UE 助力游戏开发生态建设

    2019 年 5 月 8 日-5 月 9 日,一年一度的 Unreal Open Day 虚幻引擎技术开放日在上海举办,该活动由 Epic Games 中国倾力打造,是面向虚幻引擎开发者规格最高.规模 ...

  9. 制作VB项目打包工具与安装程序

    该原因起于错误429. 当然比起自制我更推荐使用其他的功能完整的打包软件. 犹豫各种原因,导致三分钟热情被浇灭...本来想划四个部分详细讲教程的,大家看成品源码就好了,心好累. http://www. ...

  10. NDK学习笔记-JNI开发流程

    JNI(Java Native Interface)Java本地化接口,Java调用C/C++,C/C++调用Java的一套API接口 实现步骤 在Java源文件中编写native方法 public ...