Runikierbar, abrufbar, Zukunft, Futuretask, Executorservice, Excetor, Excutors und Threadpoolexcetor in Java fasst diese Schlüsselwörter und deren Verwendung zusammen.
Klassifizieren Sie sie zuerst:
Laufbar, abrufbar
Zukunft, Futuretask
Executorservice, Excetor, Excutors, Threadpoolexcetor
1. Über Ranikable und Callable
Zunächst gibt es drei Möglichkeiten, Threads in Java zu erstellen:
Vor- und Nachteile von drei Implementierungen:
Aufgrund des Erbe -Threads können andere Klassen nicht vererbt werden, und der aktuelle Thread kann dies erhalten werden.
Implementieren Sie die ablaufbare Schnittstelle, ohne Rückgabewert, erhalten Sie den aktuellen Thread -Thread.CurrentThread ()
Implementieren Sie die Callable -Schnittstelle, können Sie den Rückgabewert über Future.get () und den aktuellen Thread Thread.currentThread () abrufen.
Erben von Thread, zwei Schritte:
Klasse Demothread erweitert Thread {@Override public void run () {Super.run (); // zeitaufwändige Operation durchführen ...}} Demotread t = new Demothread (); t.start ();Um Runabel zu implementieren, verwenden Sie im Allgemeinen wie folgt:
neuer Thread (new Runnable () {@Override public void run () {// etwas tun}}). start ();Als Einfachheit.
Es ist ziemlich problematisch, die Ergebnisse der Threadausführung in den beiden oben genannten Methoden zu erhalten und kann nicht direkt erhalten werden. JDK1.5 fügt CALLABLE, CALLABLE -CALL () -Methode hinzu, um Werte zurückzugeben und Ausnahmen zu werfen. Callable kann ein zukünftiges Objekt zurückgeben, das mit den Berechnungsergebnissen geladen wird.
Callable Quellcode:
öffentliche Schnittstelle Callable <V> {v call () löst Ausnahme aus;}Grundlegende Verwendung von Callable:
Futuretask <Geuneger> futuretask = new futuretask <Gesinger> (neuer Callable <Integer> () {@Override public Integer call () löst eine Ausnahme aus {// etwas return null;}}); Thread = new thread (futuretask); thread.start ();Durch das Ausführen der Callable -Aufgabe kann ein zukünftiges Objekt abgerufen und den Rückgabewert über die Get () -Methode der Zukunft ausgeführt werden. Dann ... Zukunft,
Was ist der Unterschied zwischen Futuretask und wie man es benutzt?
-> Weiter ()
2. Über Zukunft und Futuretask
Um die Ausführungsergebnisse des Threads zu erhalten, wurde FutureTask von Future eingeführt. Wie ist ihre Beziehung und wie kann man sie benutzen?
Die zukünftige Klasse befindet sich unter dem Paket von Java.util.Concurrent, der eine Schnittstelle ist:
öffentliche Schnittstelle zukünftige <V> {boolean abbrechen (boolean mayinterruptiFrunning); boolean iscancelled (); boolean isdone (); V Get () wirft InterruptedException, ExecutionException aus; V GET (langfristige Zeiteinheit) löst InterruptedException, ExecutionException, TimeoutException aus;}Zukunft definiert 5 Methoden:
1) Boolesche Abbrechen (boolean MayInterruptiFrunning): Versuchen Sie, die Ausführung dieser Aufgabe abzusagen. Dieser Versuch schlägt fehl, wenn die Aufgabe erledigt wurde oder abgesagt wurde oder aus einem anderen Grund nicht abgesagt werden kann. Wenn Cancel () aufgerufen wird, wird die Aufgabe niemals ausgeführt, wenn der Anruf erfolgreich ist und die Aufgabe nicht begonnen wurde. Wenn die Aufgabe gestartet wurde, bestimmt der Mai -Interruptifrunning -Parameter, ob der Thread, der die Aufgabe ausführt, auf eine Weise unterbrochen werden soll, die versucht, die Aufgabe zu stoppen. Nach der Rückkehr dieser Methode werden nachfolgende Aufrufe an Isdone () immer True zurückgeben. Wenn diese Methode wahr zurückgibt, werden nachfolgende Aufrufe an iscancelled () immer wahr zurückgegeben.
2) boolean iscancelled (): Return true, wenn die Aufgabe abgebrochen wird, bevor sie normal abgeschlossen ist.
3) boolean isdone (): Return true, wenn die Aufgabe erledigt wurde. Dies kann aufgrund der normalen Beendigung, Ausnahme oder Stornierung erfolgen. In all diesen Fällen wird diese Methode true zurückgegeben.
4) v Get () löst InterruptedException, ExecutionException aus: Warten Sie bei Bedarf, bis die Berechnung abgeschlossen ist, und erhalten Sie dann das Ergebnis.
5) V GET (Langzeitübergreifende Zeiteinheit) löst InterruptedException, ExecutionException, TimeoutException aus: Bei Bedarf warten Sie höchstens nach der angegebenen Zeit, um die Berechnung vollständig zu machen und das Ergebnis zu erzielen (wenn das Ergebnis verfügbar ist).
Im Allgemeinen bietet Future drei Funktionen:
Stellen Sie fest, ob die Aufgabe erledigt ist.
Fähigkeit, Aufgaben zu unterbrechen;
In der Lage, Aufgabenausführungsergebnisse zu erhalten.
Schlüsselpunkte:
RunnableFuture erbt die Runnable -Schnittstelle und die zukünftige Schnittstelle, während Futuretask die RunnableFuture -Schnittstelle implementiert.
Futuretask -Implementierung:
öffentliche Klasse Futuretask <V> implementiert RunnableFuture <V.
Implementierung der RunnableFuture -Schnittstelle:
public interface RunnableFuture <V> erweitert Runnable, Future <V> {void run ();}Futuretask ist eine einzigartige Implementierungsklasse der zukünftigen Schnittstelle.
Zusätzlich zum Wickeln von Futuretask mit Thread gibt es eine andere Möglichkeit, es zu verwenden:
ExecutorService Executor = Executors.NewCachedThreadpool (); Futuretask <Geuner> futuretask = new Futuretask <Ganzzahl> (neuer Callable <Ganzeer> () {@Override public public Integer call () throws {// etwas return null;}). Das Ausführende Framework wird hier verwendet.
-> Weiter ();
3. Über Executorservice, Excetor, Excutors, Threadpoolexcetor
Das Executor -Framework wurde in Java 5 eingeführt. Das Executor -Framework ist ein Framework, das asynchrone Aufgaben ausführt, die auf einer Reihe von Richtlinienanrufen, der Planung, Ausführung und Steuerung basieren.
Bevor wir über das Executor -Framework sprechen, müssen wir ein neues Konzept vorstellen - ThreadPoolexecutor:
Öffentliche Threadpoolexecutor (intcorepoolSize, int maximumpoolSize, langwieriger Keepalivetime, Zeiteinheit, Blockingqueue <Runnable> WorkQueue, ThreadFactory Factory, RejejedExecutionHandler Handler)
ThreadPoolexecutor ist die zugrunde liegende Implementierung der Executors -Klasse.
In der JDK -Hilfedokumentation gibt es eine Passage:
"Es wird nachdrücklich empfohlen, dass Programmierer die bequemeren Fabrikmethoden ausführenden Methoden verwenden. NewcachedThreadpool (unbegrenzter Thread-Pool, der automatischen Thread-Recycle durchführen kann), Executors.NewFixed Threadpool (int) (int) (fester Größe) und Thread-Thread-Thread-Thread-Thread-Thread-Szenen.
Was sind Executorservice, Excetor und Excutors?
Excetor ist eine Kernschnittstelle auf abstrakter Ebene:
public interface Executor {void execute (runnable Command);}Die ExecutorService -Schnittstelle erweitert die Ausführungsschnittstelle und bietet Methoden wie die Rückgabe zukünftiger Objekte, das Beenden, Schließen von Threadpools usw.
public interface ExecutorService erweitert Executor {void Shutdown (); <t> Future <T> Subjekt (Callable <T> Aufgabe); <t> Future <T> Subjekt (Runnable Task, T Ergebnis); <t> Liste <Future <T >> InvokeAll (Sammlung <? Erweitert Callable <t >> Aufgaben, langfristige Zeitüberschreitungen, Timeunit -Einheit) löscht InterruptedException aus;}Executors sind eine Toolklasse, die den Sammlungen ähnelt. Bietet Fabrikmethoden, um verschiedene Arten von Threadpools zu erstellen, z.
public class Executors {public static ExecutorService Newfixed threadpool (int nthreads) {return neuer threadpoolexecutor (Nthreads, Nthreads, 0L, TimeUnit.Milliseconds, New LinkedBlockingQueue <Runnable> ()); } public static ExecutorService NewCachedThreadpool () {Neue threadpoolexecutor zurückgeben (0, Integer.max_value, 60L, TimeUnit.seconds, New Synchronousqueue <Runnable> ()); }}Das obige ist eine Zusammenstellung von Java-Multi-Thread-Schlüsselwörtern, daher wird es nicht chaotisch sein.
Die oben genannte Implementierung der vom Herausgeber eingeführten Java-Sortierung von Multi-Thread-Keywords in Java. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!