Auf der Suche nach einer Lösung für das Problem von Java -Daemon -Threads, die Zugriff auf ScopedValues erfordern, da sie zum Zeitpunkt des Erstellens des Daemon -Threads gebunden waren. Damit untergeordnete Threads ScopedValues erben können, muss das strukturierte TaskScope Fork/Join -Protokoll verwendet werden. Dieses Protokoll funktioniert jedoch nicht für Daemon -Threads, da es unmöglich ist, einen Bereich für sie zu erstellen, das niemals endet. Selbst wenn der gesamte Hauptfaden in einem solchen Bereich eingeschlossen ist, kann der Daemon -Thread nach main () endet und in main () erstellt () wird per Definition beendet. Die Daemon -Threads können Bibliothekscode aufrufen, die diese Dienste verwenden, und dies kann während des Herunterfahrens von JVM nach dem Ende main () geschehen. Der Satz von Diensten kann sich im Laufe der Zeit ändern (z. B. Wartung, neue Funktionen usw.), daher sollte die Lösung angesichts einer sich ändernden Liste von Diensten robust sein. Meine Lösung (unten) fühlt sich wie ein Hack an und ist für ein oder zwei Werte in Ordnung, aber es erfordert mehrere Codeänderungen, wenn ein weiterer ScopedValue im Daemon -Thread benötigt wird, und ist anfällig für Auslassungsfehler, wenn ein Code, den viele Ebenen im Dämon -Thread tief im Dämon -Thread nennt, einen Scoped -Wert verwendet. Z.B. Es ist nicht offensichtlich, auf welche ScopedValues möglicherweise durch den Daemon -Thread verwiesen wird, daher die Präferenz für eine automatische Erbschaft, wie sie durch StructuretaSkScope . Es erstellt den Daemon -Thread und verlässt sofort den ScopedValue.run () block. Zu diesem Zeitpunkt hat der Foreverthread die Werte bereits erfasst, die es benötigt, um seinen eigenen Bereich zu erstellen. Der große Nachteil dazu ist, alle Werte ausdrücklich aufzulisten, die möglicherweise vom Daemon -Thread benötigt werden (und alle Code, die er aufruft).
Auf der Suche nach einer Lösung für das [url=viewtopic.php?t=20324]Problem[/url] von Java -Daemon -Threads, die Zugriff auf ScopedValues erfordern, da sie zum Zeitpunkt des Erstellens des Daemon -Threads gebunden waren. Damit untergeordnete Threads ScopedValues erben können, muss das strukturierte TaskScope Fork/Join -Protokoll verwendet werden. Dieses Protokoll funktioniert jedoch nicht für Daemon -Threads, da es unmöglich ist, einen Bereich für sie zu erstellen, das niemals endet. Selbst wenn der gesamte Hauptfaden in einem solchen Bereich eingeschlossen ist, kann der Daemon -Thread nach main () endet und in main () erstellt () wird per Definition beendet. Die Daemon -Threads können Bibliothekscode aufrufen, die diese Dienste verwenden, und dies kann während des Herunterfahrens von JVM nach dem Ende main () geschehen. Der Satz von Diensten kann sich im Laufe der Zeit ändern (z. B. Wartung, neue Funktionen usw.), daher sollte die Lösung angesichts einer sich ändernden Liste von Diensten robust sein. Meine Lösung (unten) fühlt sich wie ein Hack an und ist für ein oder zwei Werte in Ordnung, aber es erfordert mehrere Codeänderungen, wenn ein weiterer ScopedValue im Daemon -Thread benötigt wird, und ist anfällig für Auslassungsfehler, wenn ein Code, den viele Ebenen im Dämon -Thread tief im Dämon -Thread nennt, einen Scoped -Wert verwendet. Z.B. Es ist nicht offensichtlich, auf welche ScopedValues möglicherweise durch den Daemon -Thread verwiesen wird, daher die Präferenz für eine automatische Erbschaft, wie sie durch StructuretaSkScope . Es erstellt den Daemon -Thread und verlässt sofort den ScopedValue.run () block. Zu diesem Zeitpunkt hat der Foreverthread die Werte bereits erfasst, die es benötigt, um seinen eigenen Bereich zu erstellen. Der große Nachteil dazu ist, alle Werte ausdrücklich aufzulisten, die möglicherweise vom Daemon -Thread benötigt werden (und alle Code, die er aufruft).[code]static ScopedValue sv1 = ScopedValue.newInstance(); static ScopedValue sv2 = ScopedValue.newInstance();
public static void main(String args[]) {
ScopedValue.where(sv1, "My value 1").where(sv2, "My value 2").run(() -> { System.out.println("In main thread, sv1.isBound()="+sv1.isBound()); System.out.println("In main thread, sv2.isBound()="+sv2.isBound());
new ForeverThread(sv1.get(), sv2.get()).start(); });
Auf der Suche nach einer Lösung für das Problem von Java -Daemon -Threads, die Zugriff auf ScopedValues erfordern, da sie zum Zeitpunkt des Erstellens des Daemon -Threads gebunden waren. Damit...
Wie kann ich einen Cron -Job einrichten, um mehrere PIs (über SSH) zu überwachen, die das gleiche Daemon -Skript (Service) ausführen? später). Bash -Skript, Python -Skript, Php usw.,
Ich versuche, eine App in Python zu erstellen, in der MS-Diagramm zum Senden von E-Mails aus einem freigegebenen Mailbox verwendet wird. Ich habe mich auf das MSGRAPH-SDK -Modul konzentriert. Ich...
Ich habe vor einigen Jahren ein Foto -Manager -Programm (FOTO Manager) in Python3.7 geschrieben, das WebSocket -Anrufe zwischen einem Python -Daemon und einem JavaScript -HTML -Seiten in Firefox...
Ich muss Farben aus der Farbklasse anzeigen, die dreimal angezeigt wird, und ich muss Instanzen von 3 verschiedenen Farben mit Threads hinzufügen. Das Problem ist, dass ich nicht weiß, wie ich...