ファイルをアップロードする準備ができているかどうかを定期的に確認してすぐにアップロードし、すぐにスレッドを停止します。また、長い時間が経過した場合、準備ができていないファイルに関係なくスレッドを停止したいが、runメソッド自体の内部ではスレッドを停止することはできない。スレッドを定期的に実行し、条件が満たされた後、またはそれを停止します。
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);
}
あなたはJavaでwatchServiceを使用することができますが参照をhttps://docs.oracle.com/javase/tutorial /essential/io/notification.html –