2012-04-07 11 views
2

Es scheint eine Reihe von verschiedenen Möglichkeiten zu geben, wie man Threads (Runnable vs Thread-Klasse) und auch ThreadPools erstellen kann.Die effizienteste Java-Threading-Technik?

Gibt es einen Unterschied in Bezug auf die Effizienz und welche sind die effizientesten (in Bezug auf die Leistung) Techniken zum Erstellen und Poolen von Threads in Java?

+5

Es hängt von Ihrem Anwendungsfall ab. – Jeffrey

+0

Was müssen Sie tun? – dash1e

+0

@ dash1e, frage ich allgemein. Was sind die verschiedenen besten Szenarien pro Technik? – user997112

Antwort

0

Am Ende des Tages, sie alle verlassen sich auf den gleichen zugrunde liegenden Thread-basierten Mechanismus, um tatsächlich die Arbeit zu tun. Das heißt, wenn Sie fragen "Was ist der effizienteste Weg, um einen einzelnen Thread zu starten?" Die Antwort ist, erstellen Sie ein Thread Objekt und rufen Sie start() darauf, weil jede andere Methode einige andere Schritte dauert, bevor es schließlich ein Thread Objekt erstellt und ruft start() auf es.

Das bedeutet nicht, dass dies der beste Weg ist, um Threads zu spawnen, es bedeutet nur, dass es der niedrigste Weg ist, es aus Java-Code zu machen. Was die anderen Möglichkeiten zum Erstellen von Threads bieten, sind verschiedene Arten von Infrastruktur zur Verwaltung der zugrunde liegenden Thread s, so dass die Wahl der Methode von der Menge und Art der benötigten Infrastruktur abhängig sein sollte.

3

Wenn Sie viele kurze und häufige Anfragen bearbeiten müssen, ist es besser, eine ThreadPool zu verwenden, damit Sie bereits geöffnete Threads wiederverwenden und ihnen Runnable Aufgaben zuweisen können.

Wenn Sie jedoch einen Thread für eine einzelne Taskoperation starten oder einen Daemon-Thread instanziieren müssen, der für die gesamte Anwendungszeit oder für eine bestimmte lange Zeit ausgeführt wird, könnte ein einzelner Thread besser erstellt und beendet werden. Ich brauche es nicht mehr.

+0

Entschuldigung, ich wusste so viel. Ich fragte im Grunde ist Thread schneller als Runnable und dann, aus den ThreadPool-Techniken, wie unterscheiden sie sich in Bezug auf die Leistung? – user997112

+0

Der Unterschied zwischen dem Erweitern eines Threads oder dem Erstellen eines Threads und dem Zuweisen eines Runnable ist trivial. Im ersten Fall erstellen Sie ein Java-Objekt und starten den Thread, im zweiten erstellen Sie Runnable, erstellen einen Thread mit Runnable und starten ihn. Wenn die von Ihnen bearbeitete Aufgabe nicht aktuell ist (Ende, wenn Sie einen Thread starten müssen, ist dies nicht der Fall), ist der Unterschied zwischen zwei Lösungen nicht wichtig. – dash1e

Verwandte Themen