title: ExecutorService doesn't call run() in Runnable
body: <p>I've come across a strange issue in the asmack library for Android. The library uses an ExecutorService to parse incoming packets like that:</p>
  
  <pre><code>private ExecutorService listenerExecutor;
  
  listenerExecutor = Executors.newSingleThreadExecutor(new ThreadFactory() {
  
          public Thread newThread(Runnable runnable) {
              Thread thread = new Thread(runnable,
                      "Smack Listener Processor (" + connection.connectionCounterValue + ")");
              thread.setDaemon(true);
              return thread;
          }
      });
  
  (...)
  
  listenerExecutor.submit(new ListenerNotification(packet));
  
  (...)
  
  /**
   * A runnable to notify all listeners of a packet.
   */
  private class ListenerNotification implements Runnable {
  
      private Packet packet;
  
      public ListenerNotification(Packet packet) {
          this.packet = packet;
      }
  
      public void run() {
          for (ListenerWrapper listenerWrapper : connection.recvListeners.values()) {
              listenerWrapper.notifyListener(packet);
          }
      }
  }
  </code></pre>
  
  <p>It all works fine until a point when the submit() method is called, the constructor for ListenerNotification is also called but the run() method in ListenerNotification is no longer called.</p>
  
  <p>What could be the reason for this? Are there some mechanisms in ExecutorService that may cause a call to submit to be ignored?</p>