Robin,
Sun switched to use the native threading libraries many many versions ago. This means on Windows, Java threads will map to windows threads. On Linux, to posix threads. On Solaris, to Solaris threads. Etc...
Whether a
thread will use a different processor core, or stay on the same core as other threads, is completely dependant on the underlying thread system. For Windows, Linux, and Solaris, the native threading system will use all the cores available.
The easiest way to
test this is to write a runnable class that spends some time doing something compute intensive. It can't be doing I/O or anything that just eats up time (like sleep or wait) -- but something like calculating the fibonacci sequence or something. Also these operation should not share any variables or do any type of synchronization.
If you start one thread with this class, it should take X time to compete. If you start two threads, it should also take the same X time to compete. Etc. This will keep going until you reach the number of processor cores available on your machine. Then you will degrade, as the cores will need to take on the task of more than one runnable each.
Henry