so it looks like even after t3 (highest priority thread) is started, it continues to process t2 (lower priority of 5). and actually it will process t2 for quite some time before coming to t3 in my latest run but sometimes it will return to t1 and finish t3 last. i thought the MAX_PRIORITY means it should go first?
Basically, when you have two (or more) threads in a runnable state, the one would the higher priority should run more often. Unfortunately, you don't have any threads that are in a run state too often. Your threads spent most of its time in the blocked state, as it is trying to write IO to the screen.
Anyway, try this... I slightly modified your runner to be more cpu bound, instead of IO bound.
Henry