code: public void execute()
      {
          Runnable task = new Runnable()
          {
              public void run()
              {
                  final V result = performTask();
                  SwingUtilities.invokeLater(new Runnable()
                  {
                      public void run()
                      {
                          postProcessing(result);
                          latch.countDown();
                      }
                  });
              }
          };
          new Thread(task, "SwingBackgroundTask-" + id).start();
      }
docs: Asynchronous call that begins execution of the task
  and returns immediately.