Thread Pool Pattern

bspainkf36

Erfahrenes Mitglied
Hey,
ich beschäftige mich momentan mit Threads bzw. mit ThreadPools. Ich habe mehrere Klassen, die miteinander kommunizieren. Es sollen requests ankommen, die einem Thread zugeteilt werden. Dieser soll die Aufgabe abarbeiten und anschließend weiterreichen. Von sun gibt es bereits ein Entwurf (java.util.concurrent.ThreadPoolExecutor) für dieses Muster. Ist es sinnvoll diese Vorlage zu nutzen oder sollte man möglichts etwas eigenes entwickeln.

Gruß kon
 
Hallo!

Ich wuerde empfehlen beim Standard zu bleiben und die von Sun (oder besser dem ehemaligen EDU.oswego.cs.dl.util.concurrent package von Doug Lea)angebotenen Executor Implementierungen zu verwenden.

Gruss Tom
 
Danke Thomas für die prompte Antwort :)

Hast du vielleicht ein kleines Tutorial bzw. eine Übersicht für die Erzeugung von Pool mit dem ThreadPoolExecutor? Um beispielsweise einen Thread zu erzeugen, gibt es auch mehre Möglichkeiten. Habe leider bei Mr. Allwissend (google) nichts schlüssiges Gefunden - das Thema ist relativ neu und irgendwie lässt sich nichts dazu finden :(

Danke für die Hilfe.
 
Hallo!

Schau mal hier:
Code:
/**
 * 
 */
package de.tutorials;

import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

/**
 * @author daritho
 * 
 */
public class ExecutorUsageExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        ExecutorService executorService = Executors.newCachedThreadPool();
        executorService.execute(new Runnable() {
            public void run() {
                info("started");
                for (int i = 0; i < 10; i++) {
                    try {
                        info("working");
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                info("finished");
            }
        });

        Future<String> future = executorService.submit(new Callable<String>() {
            public String call() throws Exception {
                info("started");
                try {
                    info("working");
                    TimeUnit.SECONDS.sleep(15);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                info("finished");
                return new Date().toString();
            }
        });

        executorService.execute(new Runnable() {
            public void run() {
                info("started");
                for (int i = 0; i < 10; i++) {
                    try {
                        info("working");
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                info("finished");
            }
        });

        System.out.println(future.get());
        
        executorService.shutdown();
    }

    static void info(String message) {
        System.out.println("[" + System.currentTimeMillis() + "]"
                + Thread.currentThread().getName() + " " + message);
    }
}

Gruss Tom
 
Zurück