Entendiendo Java ExecutorService

Estoy intentando aprender a usar el servicio de ejecución de Java,

Estaba leyendo la siguiente discusiónJava thread simple queue

En esto hay un ejemplo de muestra

ExecutorService service = Executors.newFixedThreadPool(10);
// now submit our jobs
service.submit(new Runnable() {
    public void run() {
    do_some_work();
   }
});
// you can submit any number of jobs and the 10 threads will work on them
// in order
...
// when no more to submit, call shutdown
service.shutdown();
// now wait for the jobs to finish
service.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);

Intenté implementar esta solución, para esto he creado un formulario y coloqué el botón de inicio y parada, pero el problema al que me enfrento es que si llamo a este proceso en el botón de inicio, colgará el formulario completo y tenemos que esperar hasta que todo el proceso esta completado.

También intenté leer lo siguientehttps://www3.ntu.edu.sg/home/ehchua/programming/java/J5e_multithreading.html

pero hasta ahora no puedo entender cómo hacerlo funcionar, ya que después de hacer clic en el botón de inicio, debería volver a acceder, supongamos que quiero detener el proceso.

¿Puede alguien guiarme en la dirección correcta?

Gracias

Para aclarar mi situación, agrego el código que estoy probando.

Problemas

1) el formulario completo permanece congelado cuando se ejecuta el programa. 2) La barra de progreso no funciona, mostrará el estado solo cuando se complete todo el proceso.

private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {                                         
  TestConneciton();

}                                        

private void btnStopActionPerformed(java.awt.event.ActionEvent evt) {                                        
    flgStop = true;
}   

   private static final int MYTHREADS = 30;
private boolean flgStop = false;
public  void TestConneciton() {
    ExecutorService executor = Executors.newFixedThreadPool(MYTHREADS);
    String[] hostList = { "http://crunchify.com", "http://yahoo.com",
            "http://www.ebay.com", "http://google.com",
            "http://www.example.co", "https://paypal.com",
            "http://bing.com/", "http://techcrunch.com/",
            "http://mashable.com/", "http://thenextweb.com/",
            "http://wordpress.com/", "http://wordpress.org/",
            "http://example.com/", "http://sjsu.edu/",
            "http://ebay.co.uk/", "http://google.co.uk/",
            "http://www.wikipedia.org/",
            "http://en.wikipedia.org/wiki/Main_Page" };

    pbarStatus.setMaximum(hostList.length-1);
    pbarStatus.setValue(0);
    for (int i = 0; i < hostList.length; i++) {

        String url = hostList[i];
        Runnable worker = new MyRunnable(url);
        executor.execute(worker);
    }
    executor.shutdown();
    // Wait until all threads are finish
//        while (!executor.isTerminated()) {
// 
//        }
    System.out.println("\nFinished all threads");
}

public  class MyRunnable implements Runnable {
    private final String url;

    MyRunnable(String url) {
        this.url = url;
    }

    @Override
    public void run() {

        String result = "";
        int code = 200;
        try {
            if(flgStop == true)
            {
                //Stop thread execution
            }
            URL siteURL = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) siteURL
                    .openConnection();
            connection.setRequestMethod("GET");
            connection.connect();

            code = connection.getResponseCode();
            pbarStatus.setValue(pbarStatus.getValue()+1);
            if (code == 200) {
                result = "Green\t";
            }
        } catch (Exception e) {
            result = "->Red<-\t";
        }
        System.out.println(url + "\t\tStatus:" + result);
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta