Angenommen, Sie den folgenden Code in einer Play-Web-Anwendung haben:Concurrency in Play für Scala
class MyClass extends Controller {
def myMethod = Action {
var a = 0
while (a < 1000) {
println("Value of a: " + a);
a = a + 1;
}
}
}
Könnte ich eine Race-Bedingung, wenn zwei Benutzer/Browser die gleiche Methode aufrufen? Wenn ja, wie kann man es vermeiden?
In diesem Fall ist die Variable "a" lokal zu thread, die die "Zukunft" der Aktion ausführt, so ist die Antwort ** nein **. Wenn das "a" als das * Feld * des Controllers deklariert würde, hätte es natürlich einen Wettlaufzustand. Eine weitere Möglichkeit, Probleme einzuführen, besteht darin, mehr 'Future' /' Thread'/'Actors' in die Veränderung von' a' einzubeziehen. –
@ insan-e aber das ist nur anwendbar, wenn der Controller ein Singleton ist. Wenn es stattdessen pro Anfrage erstellt wird, sollten keine Probleme auftreten. –