Also pay attention to the behavior of Thread.sleep(int) in your code. If you're running under Solaris, which uses 'native' threads, these threads are cooperative, not preemptive within the JRE. Under NT, you don't need to call sleep(), but under Solaris, you do in order for same-priority threads to get CPU time. If your threads aren't getting enough time, try putting a sleep(1) call in.