2012-02-13 18 views
0

在我的項目中,我使用EL的獨立碧玉實現。我添加庫到我的Maven POM文件:ValueExpression線程安全嗎?

<dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>el-api</artifactId> 
     <version>6.0.32</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>jasper-el</artifactId> 
     <version>6.0.32</version> 
    </dependency> 

目前我的應用程序是因爲EL表達式中大量使用的很慢 - 這是正確的編譯時間應該被調用。 現在我想在初始化時間移動表達式編譯,但我想知道是否會在多個線程中使用相同的ValueExpression線程安全。有什麼想法嗎?

回答

1

值表達式不是線程安全的。但是,EL實現應該在內部緩存解析的表達式,並且僅在第一次調用ExpressionFactory.createExpression(...)時才需要解析表達式字符串。

根據您的環境,您可能想要嘗試執行性能比Tomcat好的EL實現,例如, JUEL可以顯着提高性能。

+0

另外我發現從[JUEL站點](http://juel.sourceforge.net/guide/util/index.html)有用的信息: 在創建時,上下文的功能映射器和可變映射器用於綁定函數調用靜態方法和標識符(變量)來爲表達式賦值。上下文的解析器不在創建時使用。 在評估時,上下文的解析器用於屬性解析並解析未綁定標識符(頂級屬性)。在評估時不使用上下文的函數映射器和變量映射器。 – 2012-04-01 16:15:15

0

不要這麼認爲,除非您在通用初始化代碼中注意線程安全問題。