0

是在Grails(1.3.6)控制器動作和類變量線程安全下聲明的變量嗎?即是一個在Grails(1.3.6)控制器動作和類變量線程安全下聲明的變量?

class TestController { 
     String y //Is y thread-safe? 
    def testAction = { 
     String x //Is x thread-safe? 
    } 

} 
+0

控制器是請求作用域(每個請求都是新的y)。而x只是一個本地變量 – cfrick

+0

在Grails 1.3.6中,你很好。但是,從Grails 1.4.x開始,爲您的Grails應用程序默認生成的配置將控制器的範圍更改爲「singleton」或「application」,從而使您的「y」變量具有線程風險。無論如何,你不應該這樣做。不要直接向控制器或服務添加狀態。 – billjamesdev

回答

0

由於cfrick迴應,控制器是請求範圍,所有的變量將在每次調用被重置,所以他們都是線程安全的。
根據你需要達到什麼,我建議使用會話變量或使用服務
(默認情況下,服務是單例 - 只有一個服務實例存在)。

+0

也許你的意思是「控制器是請求作用域,所有變量都會在每次調用時重置,所以它們都是線程安全的」?如果爲每個請求創建了控制器的新實例,則該值不能被另一個請求破壞。 – billjamesdev

+0

@billjamesdev是的是的..現在編輯它。感謝您的注意。 :) –