Thread-Kontext-Klassenlader vs. normaler Klassenlader
Java bietet zwei unterschiedliche Mechanismen zum Laden von Klassen: den Kontext-Klassenlader des Threads und den normalen Klassenlader.
Kontextklasse des Threads Loader
Der Kontextklassenlader ist ein Klassenlader, der jedem Thread zugeordnet ist. Es wird verwendet, wenn ein Thread eine Klasse dynamisch laden muss, beispielsweise wenn Reflexion oder Deserialisierung verwendet werden. Standardmäßig ist der Kontextklassenlader auf den übergeordneten Klassenlader des Klassenladers eingestellt, der die Hauptklasse des Threads geladen hat.
Normaler Klassenlader
Der normale Klassenlader ist der Klassenlader, der zum Laden von Klassen für die aktuelle Klasse verwendet wird. Es wird mit der Methode getClass().getClassLoader() abgerufen. Normalerweise ist der normale Klassenlader derselbe wie der Kontext-Klassenlader, d. h. es ist der übergeordnete Klassenlader des Klassenladers, der die Hauptklasse geladen hat.
Welcher Klassenlader wird verwendet?
Wenn ein Thread eine Klasse dynamisch lädt, verwendet er normalerweise den Kontextklassenlader. Wenn sich jedoch der Kontext-Klassenlader des Threads vom normalen Klassenlader unterscheidet, hängt es vom Kontext ab, welcher verwendet wird.
Nur unter bestimmten Umständen kann der normale Klassenlader anstelle des Kontext-Klassenladers verwendet werden. Wenn beispielsweise der Kontext-Klassenlader null ist, wird der normale Klassenlader verwendet.
Empfehlung
Im Allgemeinen wird empfohlen, den normalen Klassenlader zu verwenden (d. h. , getClass().getClassLoader()) beim expliziten Laden von Klassen, auch wenn der Kontextklassenlader unterschiedlich ist. Beim expliziten Laden von Klassen sollte immer der Klassenlader der Klasse verwendet werden, die den Ladevorgang durchführt.
Das obige ist der detaillierte Inhalt vonThread-Kontext-Klassenlader vs. normaler Klassenlader: Wann sollte ich welchen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!