Nach Java Concurrency In Practice gibt es folgende Nachteile der unbegrenzten Thread-Erzeugung:
Thema lifecyle Kopf
Thema Schöpfung und Abrüsten sind nicht frei. Die Erstellung von Threads benötigt Zeit und erfordert einige Verarbeitungsaktivitäten von JVM und Betriebssystem.
Ressourcenverbrauch
Aktive Threads verbrauchen Systemressourcen, vor allem Speicher. Wenn es mehr ausführbare Threads als verfügbare Prozessoren gibt, sitzen Threads im Leerlauf. Viele ungenutzte Threads können viel Arbeitsspeicher binden, was den Garbage Collector unter Druck setzt und viele Threads, die um die CPUs konkurrieren, können auch andere Leistungskosten verursachen. Wenn Sie genug Threads haben, um alle CPUs beschäftigt zu halten, hilft das Erstellen von mehr Threads nicht und kann sogar weh tun.
Stabilität
Es gibt eine Grenze, wie viele Threads erstellt werden. Das Limit variiert je nach Plattform und wird von Faktoren wie JVM-Aufrufparametern, der angeforderten Stapelgröße im Thread-Konstruktor und den Beschränkungen für Threads, die vom zugrunde liegenden Betriebssystem platziert werden, beeinflusst. Wenn Sie htis limit erreichen, ist das wahrscheinlichste Ergebnis ein OutOfMemoryError. Der Versuch, sich von einem solchen Fehler zu erholen, ist sehr riskant. Es ist viel einfacher, Ihr Programm so zu strukturieren, dass Sie dieses Limit nicht überschreiten.
Bis zu einem gewissen Punkt können mehrere Threads den Durchsatz verbessern, aber über diesen Punkt hinaus mehr Threads zu schaffen verlangsamt nur auf Ihre Anwendung und das Erstellen von einem Thread zu viele können Ihre gesamte Anwendung verursachen schrecklich zum Absturz bringen. Die Art und Weise, sich aus der Gefahrenzone herauszuhalten, besteht darin, die Anzahl der von Ihrer Anwendung erstellten Threads festzulegen und die Anwendung gründlich zu testen, um sicherzustellen, dass selbst wenn diese Grenze erreicht wird, die Ressourcen nicht erschöpft sind.
Unbegrenzte Thread-Erstellung scheint beim Prototyping und der Entwicklung einwandfrei zu funktionieren. Probleme treten nur auf, wenn die Anwendung bereitgestellt und unter hoher Last ausgeführt wird.