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);
}
}