Java - propagating a threadlocal by wrapping a runnable
It might be good to revert the ThreadLocal changes in the worker thread as soon as command.run() finished (using try-finally). This would have the following advantages:

If your ExecutorService delegate (provided to the constructor) is also used somwhere else for different tasks, then currently these tasks would be affected by the changes you make to the ThreadLocals as part of ListeningDecorator.execute. For example:
ExecutorService delegateExecutor = Executors.newFixedThreadPool(10);
ListeningDecorator listeningExecutor = new ListeningDecorator(delegateExecutor);

// Sets MyService thread data
Future&lt;?&gt; future = listeningExecutor.submit(() -&gt; {
    ...
});
future.get();

// In different thread: Directly use delegateExecutor
delegateExecutor.execute(() -&gt; {
    // Would still have MyService thread data even though this was submitted
    // by different thread
    ...
});

If the MyService thread data changes were reverted as soon as command.run() finished, then this would not be an issue.
Reverting the changes might allow the garbage collector to collect MyService thread data earlier. Otherwise it might linger around indefinitely if ExecutorService delegate reuses threads.