I've set most threads in FMJ to be daemon, so they don't hold the app open. This masks possible thread leaking however.
When a Processor, DataSink, etc is properly disposed, these should all be properly closed.
Additionally any Timer instances created need to be disposed. This is not the case in 2 places in the RTP code. The Timer instances are also set to be daemon, so they won't hold the app open, but they can still leak.