是在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迴應,控制器是請求範圍,所有的變量將在每次調用被重置,所以他們都是線程安全的。
根據你需要達到什麼,我建議使用會話變量或使用服務
(默認情況下,服務是單例 - 只有一個服務實例存在)。
也許你的意思是「控制器是請求作用域,所有變量都會在每次調用時重置,所以它們都是線程安全的」?如果爲每個請求創建了控制器的新實例,則該值不能被另一個請求破壞。 – billjamesdev
@billjamesdev是的是的..現在編輯它。感謝您的注意。 :) –
控制器是請求作用域(每個請求都是新的y)。而x只是一個本地變量 – cfrick
在Grails 1.3.6中,你很好。但是,從Grails 1.4.x開始,爲您的Grails應用程序默認生成的配置將控制器的範圍更改爲「singleton」或「application」,從而使您的「y」變量具有線程風險。無論如何,你不應該這樣做。不要直接向控制器或服務添加狀態。 – billjamesdev