Wrapping around a thread is actually very useful. At the same time, an attempt to make a universal solution for all thinkable thread application not very useful, otherwise thread class itself could be improved, or a special language constructs would be advised.
At the same time, wrapping around thread at the level of application is very convenient.
I can illustrate this idea in my small article from Tips/Tricks section:
Simple Blocking Queue for Thread Communication and Inter-thread Invocation[
^].
Please look at the usage sample and pay attention how threads are wrapped in the classes
QueuedThread
and
DelegateInvocationThread
. First of all, the method to be run in a thread is encapsulated and hidden from the class used (private), so no one can call it in a wrong threads; thread initialization is conveniently hidden; also encapsulated a method for thread control and communication, so nobody can abuse the thread via direct access to it.