Ich möchte regelmäßig einen Thread ausführen, um zu prüfen, ob eine Datei zum Hochladen bereit ist, und sie hochzuladen, sobald sie fertig ist. Wenn eine lange Zeit verstrichen ist, möchte ich den Thread stoppen, obwohl die Datei nicht bereit ist, aber nicht innerhalb der run-Methode selbst.Thread regelmäßig ausführen und stoppen, wenn die Bedingung erfüllt ist oder die Zeit abgelaufen ist
final ScheduledFuture<?> fileUploadedFuture = scheduler.scheduleAtFixedRate(() -> {
try {
if (fileReady("xyz.txt")) {
uploadFile("xyz.txt")
//cancel fileUploadedFuture and fileUploadedFutureCanceller
}
} catch (Exception e) {
throw new ServiceException(e);
}
}, 0, delay, TimeUnit.SECONDS);
final ScheduledFuture<?> fileUploadedFutureCanceller = scheduler.schedule(() -> {
fileUploadedFuture.cancel(true);
}, 60, TimeUnit.SECONDS);
}
Sie können watchService in Java verwenden beziehen https://docs.oracle.com/javase/tutorial /essential/io/notification.html –