title: future.cancel does not work
body: <p>I have a nice and compact code, which does not work as I expected.</p>
  
  <pre><code>public class Test {
  
      public static void main(String[] args) {
  
          Runnable r = new Runnable() {
              @Override
              public void run() {
                  try {
                      for (;;) {
  
                      }
                  } finally {
                      System.out.println("FINALLY");
                  }
  
              }
          };
  
          ExecutorService executor = Executors.newSingleThreadExecutor();
  
          Future&lt;?&gt; future = executor.submit(r);
          try {
              future.get(3, TimeUnit.SECONDS);
          } catch (TimeoutException e) {
              boolean c = future.cancel(true);
              System.out.println("Timeout " + c);
          } catch (InterruptedException | ExecutionException e) {
              System.out.println("interrupted");
          }
          System.out.println("END");
  
      }
  
  }
  </code></pre>
  
  <p>The output is :</p>
  
  <blockquote>
    <p>Timeout true</p>
    
    <p>END</p>
  </blockquote>
  
  <p>Question:
  Why does not terminate the future.cancel(true) method the called Runnable?
  After the program wrote the "END" to the output, the "r" Runnable is still running.</p>