In a multithreaded environment Configuration
        instances, 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.
        Beware with 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 set...
        methods (calling 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
