具有多线程的Scala单例对象>>

问题描述 投票:7回答:2

使用play,我的控制器将Foo服务称为对象

。该对象仅使用valimmutable data structures,将由多个客户端调用。

当我的控制器在多个线程中调用Foo.doQuery()时,会发生什么?

如果客户端1进行执行Foo.doQuery()的呼叫,客户端2到Foo.doQuery()的呼叫是否必须等待?

我很好奇我是否应该简单地为Foo的每个实例创建一个新类,但是我想知道在多线程环境中仅使用val的Scala单例会发生什么。

[通过播放,我的控制器将Foo服务称为对象。仅使用val和不可变数据结构的该对象将由多个客户端调用。当我的控制器调用Foo.doQuery()...

multithreading scala playframework singleton
2个回答
11
投票

[不,Scala对象并不意味着锁定(在Java中为'synchronized'),因此客户端2不必等待。如果您未在代码中明确添加锁,则客户端1,客户端2和客户端n都可以同时运行。


0
投票

为了说明@harp seal pup的答案,这是一个带有输出的示例演示,我们可以观察到可变变量myname受每个运行线程的影响。但是对于每个线程,不变的val thname不会受到影响或锁定。

© www.soinside.com 2019 - 2024. All rights reserved.