In a multithreaded environment
Template instances and data-models
should be handled as immutable (read-only) objects. That is, you
create and initialize them (for example with
set... methods), and
then you don't modify them later (e.g. you don't call
set...). This allows us
to avoid expensive synchronized blocks in a multithreaded environment.
Template instances; when you get a
Template instance with
Configuration.getTemplate, you may get an instance
from the template cache that is already used by other threads, so do
not call its
process is of course fine).
The above restrictions do not apply if you access all objects from the same single thread only.
It is impossible to modify the data-model object or a shared variable with FTL,
unless you put methods (or other objects) into the data-model that do
that. We discourage you from writing methods that modify the
data-model object or the shared variables. Try to use variables that
are stored in the environment object instead (this object is created
for a single
Template.process call to store the
runtime state of processing), so you don't modify data that are
possibly used by multiple threads. For more information read: Variables, scopes