Struts2スコープ外でOGNLライブラリを再利用します。私はかなり大きな数式のセットを持っているので、それらすべてをプリコンパイルしたいと思います。
Ognl.parseExpression(expressionString);
しかし、プリコンパイルされた式がマルチスレッド環境で使用できるかどうかはわかりません。使用できるかどうか誰か知っていますか?
Struts2スコープ外でOGNLライブラリを再利用します。私はかなり大きな数式のセットを持っているので、それらすべてをプリコンパイルしたいと思います。
Ognl.parseExpression(expressionString);
しかし、プリコンパイルされた式がマルチスレッド環境で使用できるかどうかはわかりません。使用できるかどうか誰か知っていますか?
このOGNL のPropertyUtilsコードは、スレッド セーフになるように記述されているため、コンパイルされた式はスレッド セーフになるように意図されていると推測できます。
さらなる証拠として、ほとんどのアクセサー API は変更可能な状態をコンテキスト パラメーターとして提供するため (たとえば、PropertyAccessorを参照)、クラス自体には変更可能な状態はほとんどありません。不変クラスは本質的にスレッドセーフです。開発者ガイドでは、拡張機能をスレッドセーフにすることを推奨しており、最終的にコードを調べると、変更可能な状態がある場合は、同期ブロックで保護されます。たとえば、EvaluationPoolを参照してください。
要約すると、OGNL はスレッドセーフになるように設計されているようです。それが実際にあるかどうかは別の問題です!Concutestなどを使用して、確実に確認するための簡単なテストを作成できます。別の方法として、スレッドの数が妥当な場合、すべての式を ThreadLocal に格納すると、メモリが少し余分に消費されます (または、OGNL が式のキャッシュを行うため、そうではない可能性があります)。