TimeScheduler3 runs tasks in separate threads if task.can_block is set to true.
However, if a task sends a message, then it can never block if (default) bundler PerDestinationBundler or TransferQueueBundler is used. (NoBundler is not recommended anymore).
Todo: look at the tasks run by TimeScheduler3: in most cases (a message is sent), a task can be run on the timer's thread, and no new thread need to be created.
Creating a new thread is not really a problem if virtual threads arwe used, but as of today, not many folks are running a JDK >= 21.