In den letzten zwei Jahren der Arbeit in Android, durch die Erforschung von Android-Quellcode, werde ich auch ein gewisses Verständnis der gleichzeitigen Verarbeitung von Multi-Threading-Java-Verarbeitung haben.
Die Frage ist also, wie Sie einen seriellen Threadpool implementieren.
Was ist ein serieller Fadenpool?
Mit anderen Worten, unsere laufbaren Objekte sollten einen Warteschlangenmechanismus aufweisen, der nach der Sequenz aus dem Schwanz der Warteschlange eingeht, und wählt aus dem Kopf der Warteschlange zur Ausführung Runnable.
Betrachten wir die erforderliche Datenstruktur, da wir eine Idee haben?
Da wir das runnable Objekt am Ende der Warteschlange einfügen und das Runnable -Objekt aus dem Kopf der Warteschlange ausführen, brauchen wir natürlich eine Warteschlange. Das SDK von Java hat uns eine gute Warteschlangendatenstruktur zur Verfügung gestellt, wie z.
Import Java.util.ArrayDequ; Import Java.util.Concurrent.Blockingqueue; Import Java.util.Concurrent.LinkedBlockingDeque; java.util.concurrent.atomic.atomicinteger;/*** Erstellt von WZY am 16-1-5. */öffentliche Klasse Serialexecutor {private runnable mactive; private ArrayDequ <Runnable> marrayDequ = new ArrayDequ <> (); private statische endgültige int cpu_count = runTime.getRuntime (). AFFORMPROCESSORS (); private statische endgültige int core_pool_size = cpu_count + 1; private statische endgültige int maximum_pool_size = cpu_count * 2 + 1; private statische endgültige int keep_alive = 1; private statische endgültige Blockierung <Runnable> spoolworkqueue = new LinkedBlockingDeque <> (128); private statische endgültige ThreadFactory sthreadfactory = new threadFactory () {private endgültige Atomicinger Mcount = new Atomicinteger (1); @Override public thread newThread (runnable r) {neuer Thread zurückgeben (r, "Serien -Thread #" + mcount.getandIncrement ()); }}; private statische endgültige ThreadPoolexecutor thread_executor = new threadPoolexecutor (core_pool_size, maximum_pool_size, keep_alive, TimeUnit.sekunden, spoolworkqueue, sthreadfactory); public synchronisierte void execute (endgültiger runnable r) {marrayDequ.offer (new Runnable () {@Override public void run () {try {r.run ();} schließlich {enderUnext ();}}}); // Wenn Sie zum ersten Mal in die Warteschlange beitreten, müssen Sie die ScheduleNext -Methode manuell anrufen, wenn (mactive == null) {enderUlenext (); }} private void enderext () {if ((mactive = marrayDequ.poll ())! = null) {thread_executor.execute (mactive); }} public static void main (String [] args) {SeriaLexecutor SeriaLexecutor = new SeriaLexecutor (); für (int i = 0; i <10; i ++) {endgültig int j = i; seriaLexecutor.execute (new Runnable () {@Override public void run () {System.out.println ("Die Num ist:" + (j + 1)); try {thread.sleep (1000);} catch (InterruptedException E) {e.printSpacktrace ();}}}}); }}}Die Ausführungsergebnisse sind wie folgt:
Die Num ist: 1
Die Num ist: 2
Die Num ist: 3
Die Num ist: 4
Die Num ist: 5
Die Num ist: 6
Die Num ist: 7
Die Num ist: 8
Die Num ist: 9
Die Num ist: 10
Das obige ist der gesamte Inhalt dieses Artikels über die Analyse von seriellen Thread -Pool -Instanzen von Java -Parallelität, und ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!