Grails(1.3.6)コントローラアクションとクラス変数スレッドセーフで宣言されている変数はありますか?すなわちGrails(1.3.6)のコントローラアクションとクラス変数で宣言された変数はスレッドセーフですか?
class TestController {
String y //Is y thread-safe?
def testAction = {
String x //Is x thread-safe?
}
}
Grails(1.3.6)コントローラアクションとクラス変数スレッドセーフで宣言されている変数はありますか?すなわちGrails(1.3.6)のコントローラアクションとクラス変数で宣言された変数はスレッドセーフですか?
class TestController {
String y //Is y thread-safe?
def testAction = {
String x //Is x thread-safe?
}
}
cfrickが応答したようなので、それらのすべてがスレッドセーフである、コントローラがリクエストスコープされ、すべての変数は、各呼び出しでリセットされます。
達成する必要のある内容に応じて、セッション変数を使用するか、サービスを使用することをお勧めします。
(デフォルトではサービスはシングルトンです - サービスのインスタンスは1つしか存在しません)
おそらく、「コントローラはリクエストスコープであり、すべての変数は各呼び出しでリセットされるため、それらのすべてがスレッドセーフです」ということを意味しますか?要求ごとにコントローラの新しいインスタンスが作成された場合、その値は別の要求によって拘束されることはありません。 – billjamesdev
@billjamesdevはいはいはい..今すぐ編集しています。気づいてくれてありがとう。 :) –
コントローラの要求スコープ(要求ごとに新しいy)。 xはローカル変数です。 – cfrick
Grails 1.3.6では、問題ありません。しかし、Grails 1.4.xではGrailsアプリケーションのデフォルトの設定でコントローラのスコープが "シングルトン"または "アプリケーション"に変更され、 "y"変数がスレッドを危険にさらします。とにかく、これを行うべきではありません。コントローラまたはサービスに直接状態を追加しないでください。 – billjamesdev