在Scala中进行多线程处理的推荐方法是什么?

时间:2016-09-12 02:21:18

标签: java multithreading scala

我对在Scala中编写多线程代码时采取的方法感到困惑。我看到三个选项: -

  1. 使用Java样式..并在存在语法问题的地方使用Scala。在Scala中没有volatile关键字,但是字段可以用@volatile标记为volatile,并且函数没有同步允许,但可以使用this.synchronized
  2. 尽可能使用scala.concurrent.impl包。这有一个Scala特定的Future,FutureTasks等。然后有scala.collection.mutable提供各种集合,如PriorityQueue,SynchronizedBuffer,SynchronizedMap,其中一些已被弃用,文档建议使用java.util.concurrent(!),这使得事情甚至更奇怪。
  3. 最后,还有Akka,有人说它会成为Scala版本的一部分,并且将成为多线程的默认方式。我不太确定。
    有人能告诉我哪种方法适合简单的多线程应用......例如如果我正在编写具有多个生产者线程和多个消费者线程的生产者消费者类型的应用程序,这是正确的标量方式 阿卡似乎有点矫枉过正 我不明白为什么Scala库提供了自己的并发数据结构..其中一些不推荐使用,甚至不提供Java并发包的任何附加功能。

2 个答案:

答案 0 :(得分:1)

我的建议是从Futures开始,然后在需要时转移到Actors。

答案 1 :(得分:0)

Akka不仅仅是多线程。它是分布式应用程序/作业的框架。如果你必须实现多个消费者/生产者线程,我会告诉你akka。

也许看一下文档的分布式pub-sub部分。似乎几乎可以解决您的问题:http://doc.akka.io/docs/akka/current/scala/distributed-pub-sub.html

如果akka太复杂而无法入门,请使用Scala功能。这是关于https://github.com/viktorklang/blog

的Scala功能的一系列文章