Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有特定于Scala的方法来实现定期执行?_Scala_Concurrency_Actor - Fatal编程技术网

是否有特定于Scala的方法来实现定期执行?

是否有特定于Scala的方法来实现定期执行?,scala,concurrency,actor,Scala,Concurrency,Actor,也就是每隔一段时间做一件事 例如,假设我想每60秒扫描一个特定的目录 在Java中,我会使用这样的方法: 这很好 问题是,我想我想尝试在我的程序中使用Scala actors,但对于如何组合actors和Java执行器,或者是否应该这样做,我有点困惑 我想也许我可以有一个简单的runner,它只需每N秒向一个演员发送一条消息——这有意义吗?您可以尝试它本身,而不是Java 执行提交的java.lang.Runnable任务的对象。 此接口提供了一种将任务提交与每个任务的运行机制分离的方法,包括线

也就是每隔一段时间做一件事

例如,假设我想每60秒扫描一个特定的目录

在Java中,我会使用这样的方法:

这很好

问题是,我想我想尝试在我的程序中使用Scala actors,但对于如何组合actors和Java执行器,或者是否应该这样做,我有点困惑


我想也许我可以有一个简单的runner,它只需每N秒向一个演员发送一条消息——这有意义吗?

您可以尝试它本身,而不是Java

执行提交的
java.lang.Runnable
任务的对象。
此接口提供了一种将任务提交与每个任务的运行机制分离的方法,包括线程使用、调度等细节。
通常使用执行器,而不是显式创建线程。例如,对于一组任务中的每一个,您可以使用以下命令,而不是调用
新线程(new(RunnableTask()).start()


我想也许我可以有一个简单的跑步者,它只需要每N秒向一个演员发送一条信息——这有意义吗

是的,顺便考虑一下用Akka作为演员。它有一个更简单的API,更好的性能,并且有很多好吃的东西


谢谢,但这看起来只是一个界面。我在官方的Scala 2.8 API doc nightlies中找不到这个包。我当然愿意使用Akka,但我有点困惑。。。如果参与者是Scala如此重要的一部分,而Akka的API和实现更好,那么为什么它不集成到Scala中呢?我只能猜测社会上对此存在冲突。Scala附带的功能并不是语言的一部分,只是感觉上是这样的。阿克卡不能代替演员impl。Scala随附,因为它们没有相同的API。就像盖伊·斯蒂尔(Guy Steele)所说的那样:你不能把每一个好的框架都放到语言中,最好是让每个用户做出决定。Akka是如何缩放(=扩展)Scala的完美示例,Scala是按比例制作的。但有计划将STM应用于Scala。如果您不想等待,您可以在Akka使用STM。谢谢Olle,非常有用。但事实上,考虑到默认实现“只是”一个库,这让我更加好奇为什么不用Akka替换它?我想我是说,赞成和反对的是什么?默认实现肯定有一些优点,否则它就不会保持默认。保持Akka的现状,一个独立的框架,将给Jonas Bonér和Viktor Klang(Akka的创建者和主要贡献者)他们认为合适的自由。Akka有很好的计划,该框架有公司的支持。使用Scala发布框架(就像第一个Actor实现一样)可能不是一个好主意。如果Akka被嵌入Scala,这种自由就会丧失。您可以将使用Scala免费获得的Actor实现作为SUN(多年前)提供的参考J2EE实现,也就是说不是很好
Executor pool = Executors.newScheduledThreadPool(10)
pool.scheduleAtFixedRate(scanner, 0, 60, TimeUnit.SECONDS)
 Executor executor = anExecutor;
 executor.execute(new RunnableTask1());
 executor.execute(new RunnableTask2());
 ...