【发布时间】:2016-11-07 12:10:58
【问题描述】:
假设您在 Play 网络应用程序中有以下代码:
class MyClass extends Controller {
def myMethod = Action {
var a = 0
while ( a < 1000 ) {
println( "Value of a: " + a );
a = a + 1;
}
}
}
如果两个用户/浏览器调用相同的方法,我会出现竞争条件吗?如果是,如何避免?
【问题讨论】:
-
在这种情况下,变量
a是执行Action的Future的线程的本地变量,所以答案是否。如果a被声明为控制器的字段,那么它当然会有竞争条件。另一种引入问题的方法是让更多Futures/Threads/Actors参与更改a。 -
@insan-e 但这仅适用于控制器是单例的情况。如果它是按请求创建的,那么应该没有问题。
标签: scala playframework playframework-2.5