使用play
,我的控制器将Foo
服务称为对象
val
和immutable data structures
,将由多个客户端调用。当我的控制器在多个线程中调用Foo.doQuery()
时,会发生什么?
如果客户端1进行执行Foo.doQuery()
的呼叫,客户端2到Foo.doQuery()
的呼叫是否必须等待?
我很好奇我是否应该简单地为Foo
的每个实例创建一个新类,但是我想知道在多线程环境中仅使用val
的Scala单例会发生什么。
[通过播放,我的控制器将Foo服务称为对象。仅使用val和不可变数据结构的该对象将由多个客户端调用。当我的控制器调用Foo.doQuery()...
[不,Scala对象并不意味着锁定(在Java中为'synchronized'),因此客户端2不必等待。如果您未在代码中明确添加锁,则客户端1,客户端2和客户端n都可以同时运行。
为了说明@harp seal pup的答案,这是一个带有输出的示例演示,我们可以观察到可变变量myname
受每个运行线程的影响。但是对于每个线程,不变的val thname
不会受到影响或锁定。