The requirement to be thread safe has a few implementation implications for manipulators:
For optimal performance, it is a good idea to minimize the time you
hold locks in
processRecord()
.
Manipulators should not hold locks when calling
OutputChannel.output()
from
processRecord()
. The call to
output()
may take a while to return, which blocks
other threads that are concurrently calling
processRecord()
. One way of holding locks is by using
the Java synchronize keyword for a method. However, synchronizing
processRecord()
adversely affects performance.
Synchronizing effectively makes the manipulator single threaded by preventing
other threads from entering
processRecord()
.