Check this code out
Thread t1 = new Thread(new Runnable() {
@Override
public void run()
{
try
{
Most JVMs implement threads with native, OS level threads, including the Oracle reference implementation based on OpenJDK.
I imagine the JVMs that use 'green threads' (user space simulation of threads) would use preemptive scheduling so that an infinite loop in one thread doesn't block the other threads, but without knowledge of a particular implementation this is just speculation.