title: Why thread with lower priority get longer CPU time than thread with higher priority in this code
body: <p>I'm reading Threads from <code>Java The complete Reference - Herbert Schildt (TATA McGRAW HILL)</code>. And in this example form book, Thread with lower priority should give lower value of <code>clicks</code> than Thread with higher priority. But what i got</p>
  
  <pre><code>low-priority thread 3000255895
  hi-priority thread  2857361716
  </code></pre>
  
  <p>according to book it is something like this (difference)</p>
  
  <pre><code>low-priority thread 4408112
  hi-priority thread  589626904
  </code></pre>
  
  <p>code</p>
  
  <pre><code>class Clicker implements Runnable {
      long click = 0;
      Thread t;
      private volatile boolean running = true;
  
      public Clicker (int p) {
          t  = new Thread(this);
          t.setPriority(p);
      }
  
      public void run() {
          while(running) {
              click++;
          }
      }
  
      public void stop() {
          running = false;
      }
  
      public void start() {
          t.start();
      }
  }
  
  class Priority {
      public static void main(String args[]) {
          Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
          Clicker hi = new Clicker(Thread.NORM_PRIORITY + 2);
          Clicker lo = new Clicker(Thread.NORM_PRIORITY - 2); 
          hi.start();
          lo.start();
          try {
              Thread.sleep(10000);
          } catch (InterruptedException e) {
              System.out.println("main thread interrupted");
          }
  
          lo.stop();
          hi.stop();
  
          try {
              hi.t.join();
              lo.t.join();
          } catch (InterruptedException e) {
              System.out.println("interrupted exception catched in main");
          }
  
          System.out.println("low-priority thread " + lo.click);
          System.out.println("hi-priority thread " + hi.click);
      }
  }
  </code></pre>
  
  <p>I'm on <code>Intel® Core™ i3-2310M CPU @ 2.10GHz × 4 with Ubuntu 13.04</code> </p>
  
  <p>with <code>Thread.sleep(50000);</code></p>
  
  <pre><code>low-priority thread 14849893875
  hi-priority thread 14224080358
  </code></pre>
  
  <p>Is it not a big difference </p>
  
  <p>I also try with priority HI = 10 and LOw = 1, But result nearly same.</p>
  
  <p>UPDATE: 
  After running with 100 threads 50 with <code>priority = 1</code> and <code>50 with priority = 10</code> result is </p>
  
  <p>here <code>time = clicks values</code></p>
  
  <pre><code>high = 82 time = 110117529
  low =  83 time = 102549208
  high = 84 time = 110905795
  low =  85 time = 99100530
  high = 86 time = 105012756
  low =  87 time = 110195297
  high = 88 time = 102820088
  low =  89 time = 97814606
  high = 90 time = 99990839
  low =  91 time = 102326356
  high = 92 time = 98656119
  low =  93 time = 98127243
  high = 94 time = 97097823
  low =  95 time = 103604394
  high = 96 time = 93632744
  low =  97 time = 99032550
  high = 98 time = 103879116
  low =  99 time = 97179029
  </code></pre>
  
  <p>With 1000 Threads <code>Take 4-5 min. to complete, all 4 cores at 100%</code></p>
  
  <pre><code>low =  977 time = 23593983
  high = 978 time = 23998970
  low =  979 time = 23879458
  high = 980 time = 22775297
  low =  981 time = 21297504
  high = 982 time = 22464600
  low =  983 time = 20301501
  high = 984 time = 19073992
  low =  985 time = 19450707
  high = 986 time = 19317769
  low =  987 time = 18454648
  high = 988 time = 17901939
  low =  989 time = 16976661
  high = 990 time = 17360728
  low =  991 time = 16813824
  high = 992 time = 15531501
  low =  993 time = 14659965
  high = 994 time = 12833364
  low =  995 time = 13708670
  high = 996 time = 13348568
  low =  997 time = 12947993
  high = 998 time = 12749436
  low =  999 time = 9804643
  </code></pre>
  
  <p>Unpredictable output for each thread. </p>