Why are resources tied to ThreadGroups?
Every thread of execution on any given platform has its own context, which contains an execution state, and a set of access rights (among other things). A thread's access rights are equal to that of the parent thread, minus rights denied by the parent. In Java, all threads of execution, and thread groups within an applet (or application) belong to a parent ThreadGroup object. A thread's access to Java resources is therefore determined by its parent ThreadGroup object (including the thread of execution that passes through init(), start(), stop(), processEvent( ), bla,bla,bla).
Some of the resources on older servers (ie:X11-R5) are single threaded, complicating access further.