title: Java Thread priority has no effect
body: <p>This is a test about thread priority.
  The code is from Thinking in Java p.809</p>
  
  <pre><code>import java.util.concurrent.*;
  
  public class SimplePriorities implements Runnable {
      private int countDown = 5;
      private volatile double d; // No optimization
      private int priority;
  
      public SimplePriorities(int priority) {
          this.priority = priority;
      }
  
      public String toString() {
          return Thread.currentThread() + ": " + countDown;
      }
  
      public void run() {
          Thread.currentThread().setPriority(priority);
          while (true) {
              // An expensive, interruptable operation:
              for (int i = 1; i &lt; 10000000; i++) {
                  d += (Math.PI + Math.E) / (double) i;
                  if (i % 1000 == 0)
                      Thread.yield();
              }
              System.out.println(this);
              if (--countDown == 0)
                  return;
          }
      }
  
      public static void main(String[] args) {
          ExecutorService exec = Executors.newCachedThreadPool();
          for (int i = 0; i &lt; 5; i++)
              exec.execute(new SimplePriorities(Thread.MIN_PRIORITY));
          exec.execute(new SimplePriorities(Thread.MAX_PRIORITY));
          exec.shutdown();
      }
  }
  </code></pre>
  
  <p>I wonder why I can't get a regular result like:</p>
  
  <pre><code>Thread[pool-1-thread-6,10,main]: 5 
  Thread[pool-1-thread-6,10,main]: 4 
  Thread[pool-1-thread-6,10,main]: 3 
  Thread[pool-1-thread-6,10,main]: 2 
  Thread[pool-1-thread-6,10,main]: 1 
  Thread[pool-1-thread-3,1,main]: 5 
  Thread[pool-1-thread-2,1,main]: 5 
  Thread[pool-1-thread-1,1,main]: 5 
  Thread[pool-1-thread-5,1,main]: 5 
  Thread[pool-1-thread-4,1,main]: 5 
  ...
  </code></pre>
  
  <p>but a random result (every time I run it changes):</p>
  
  <pre><code>Thread[pool-1-thread-2,1,main]: 5
  Thread[pool-1-thread-3,1,main]: 5
  Thread[pool-1-thread-4,1,main]: 5
  Thread[pool-1-thread-2,1,main]: 4
  Thread[pool-1-thread-3,1,main]: 4
  Thread[pool-1-thread-1,1,main]: 5
  Thread[pool-1-thread-6,10,main]: 5
  Thread[pool-1-thread-5,1,main]: 5
  ...
  </code></pre>
  
  <p>I use i3-2350M 2C4T CPU with Win 7 64 bit JDK 7.
  Does it matter ?</p>