Der Inhalt dieses Artikels befasst sich mit der Verwendung des Executor-Multithreading-Frameworks (mit Beispielen). Ich hoffe, dass er für Sie hilfreich ist.
In unserem JDK1.5 hat JAVA ein Framework (Executor) eingeführt, das für eine bequemere Entwicklung von Multithread-Anwendungen gekapselt ist. Im Vergleich zur herkömmlichen Thread-Klasse ist Executor praktischer, bietet eine bessere Leistung und ist besser einfacher zu verwalten und unterstützt Thread-Pools. Im Allgemeinen ist bei der Entwicklung eines Crawlers Multithreading erforderlich, um die Effizienz des Crawlers zu verbessern. Executor ist eine sehr gute Wahl.
Gemeinsame Schnittstellen:
1) Erstellen Sie einen Thread-Pool mit einer festen Anzahl von Threads:
public static ExecutorService newFixedThreadPool(int nThreads)
2) Einen Thread ausführen
void java.util.concurrent.Executor.execute(Runnable command)
3) Aktuelle Anzahl aktiver Threads anzeigen
int java.util.concurrent .ThreadPoolExecutor.getActiveCount ()
4) Alle Threads beenden
void java.util.concrrent.ExecutorService.shutdonw()
Executor ist wirksam, wenn die Anordnung mehrerer Threads verwaltet wird . Wenn der Thread-Pool beispielsweise zum Zeitpunkt seiner Erstellung 10 Threads enthält, führt das Hinzufügen von mehr als 10 Executoren zum Implementieren von Threads zu einer effektiven Blockierung und Planung der Warteschlange. Für uns Entwickler ist dies transparent und es besteht kein Grund, sich darum zu kümmern, wie es intern funktioniert.
Beispielcode:
package com.java.executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; public class ExecutorTest { private static Integer count = 1; //数量 private static boolean flag = true;//是否执行 public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(10);//在连接池中初始化10个线程 while(flag){ if(count<=100){ executorService.execute(new Runnable() { @Override public void run() { System.out.println("执行 : " + count++); } }); }else{ //判断是否有活动线程 if(((ThreadPoolExecutor)executorService).getActiveCount()==0){ executorService.shutdown();//结束所有线程 flag=false; System.out.println("完成操作"); } } try { Thread.sleep(100);//休息0.1秒 } catch (InterruptedException e) { e.printStackTrace(); } } } }
Dies ist eine einfache Möglichkeit, Executor zu verwenden, bequem und schnell und leicht zu erlernen um hier eine Pause einzulegen 0,1 In Sekunden haben wir den obigen Code nicht gesperrt. Wenn wir uns nicht auf diesem Code ausruhen, ist der Thread weiterhin aktiv und wird nicht geschlossen Darüber hinaus ist die Thread-Ausführungsgeschwindigkeit sehr schnell und übersteigt unsere Anforderungen. Wenn der Crawler das Web mit dieser Geschwindigkeit crawlt, kann er leicht blockiert werden.
Das obige ist der detaillierte Inhalt vonVerwendung des Executor-Multithreading-Frameworks (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!