Ich habe einen ständig laufenden Dienst, den ich sauber stoppen möchte, wenn es eine Ausnahme trifft. Dies passt gut zum Paradigma "Versuch mit Ressourcen", aber es ist nicht wirklich eine Ressource, die "geschlossen" werden muss.Verwenden von Try-mit-Ressourcen mit Dingen, die keine "Ressourcen" sind
Um basierend auf Kommentare zu klären, sieht mein Code so etwas wie diese
class Service {
Resource resource;
State state;
boolean keepRunning = false;
void start() {
keepRunning = true;
resource = new Resource()
new Thread(() -> {
while(keepRunning) {
Data data = resources.pull();
state.update(data);
... // Do stuff with state
}
}).start();
}
void stop() {
keepRunning = false;
}
}
class Main {
void run() {
Service service = new Service();
service.start();
}
}
Gibt es ein Muster, das ich den syntaktischen Zucker verwenden kann, die versuchen-mit-Ressourcen zur Verfügung stellen, während immer noch nicht try-with-Ressourcen zu missbrauchen mit Dingen, die keine Ressourcen sind?
Dies ist unklar. Was meinst du konkret mit "Service"? Und was beinhaltet "sauber stoppen"? –
Es ist meist nur eine kontinuierlich laufende While-Schleife, die eine periodische Aufgabe ausführt. Diese Aufgabe erstellt intern einen Thread, der sich selbst mit den neuesten Daten einer Ressource aktualisiert. Beim Stoppen wird die Schleife unterbrochen und die Ressource geschlossen. – Glyde
Um mit Ressourcen zu versuchen, müssen Sie nur 'Closable' implementieren. Aber Sie brauchen nichts in der nahen Methode –