Threading variations are probably more a result of the underlying thread library than the Java spec.

As an example, Linux posix threads use a single process per thread, which means that each thread also gets a different pid (via getpid()). Even worse, the signal handling gets all screwed up, and you can't task a single thread to receive signals for all the threads in a process (which is how you should do it).

The Solaris and Win32 thread libraries do not have these problems.