Currently the Subject.associateWith* methods return objects that are associated with the Subject. Then the caller is expected to dispatch the callable/runnable to some thread mechanism as they see fit.
It might be nice to simplify this even further for anyone relying on the ExecutorService API, say by creating a SubjectExecutorService implementation that:
1) Looks up the currently executing Subject
2) calls subject.associateWith* methods on the callable/runnable argument
3) dispatches the associated callable/runnable to the underlying 'real' ExecutorService instance.
It reduces Shiro-user code complexity in that they don't need to call the subject.execute* or subject.associateWith* methods any time they need to dispatch to another thread.