If you give one thread higher priority than another, it will generally be favored by the thread scheduler. On some systems this may be absolute - a thread may
never run as long as a higher priority thread is runnable (and not waiting, sleeping, or blocking on input). On other systems it's a bit more random and unpredictble. There's really no reliable way to control threads as precisely as you seem to want; the
Java specifications purposely avoid being too specific about priorities, leaving different implementations free to concentrate on other things like efficiency and reliability. If you want to give multiple threads equal opportunity to run, make them equal priority, and call yield() periodically. If you want threads to have unequal opportunity, give them unequal priority - but don't expect any further refinement in your ability to control, especially if you run on different platforms.
However if you're worried that the poor low-priority thread will never run, here's a simple modification to reassure you:
If your threads have intervals where they are sleeping, waiting, or blocking on input, then the JVM
will make sure the time isn't wasted - it will find another runnable thread to run, if one is available.