Java ExecutorService verstehen

ch versuche zu lernen, wie man den Executorservice von Java benutz

Ich habe die folgende Diskussion gelesenJava Thread einfache Warteschlange

In diesem gibt es ein Beispielbeispiel

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

Ich habe versucht, diese Lösung zu implementieren. Dafür habe ich ein Formular erstellt und die Start- und Stoppschaltfläche platziert, aber das Problem, dem ich gegenüberstehe, ist, dass, wenn ich diesen Prozess auf der Startschaltfläche aufrufe, das vollständige Formular hängen bleibt und wir warten müssen, bis alle fertig sind Vorgang ist abgeschlossen.

Ich habe auch versucht, die folgenden @ zu leshttps: //www3.ntu.edu.sg/home/ehchua/programming/java/J5e_multithreading.htm

Aber bis jetzt kann ich nicht verstehen, wie es funktioniert, da ich nach dem Klicken auf die Schaltfläche "Start" wieder Zugriff erhalten sollte, wenn ich den Vorgang anhalten möchte.

Kann jemand mich bitte in die richtige Richtung führen.

Vielen Dan

Um meine Situation klarer zu machen, füge ich den Code hinzu, den ich teste.

Probleme

1) Das vollständige Formular bleibt beim Ausführen des Programms eingefroren. 2) Der Fortschrittsbalken funktioniert nicht. Der Status wird nur angezeigt, wenn der gesamte Vorgang abgeschlossen ist.

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage