我正在向本地服务器发送文件,该服务器会返回一个文件。我的问题是当用户连续执行多个操作时,如果其中一个请求在5分钟内没有收到反馈文件,我需要显示错误消息。
我该如何处理所有这些请求?我使用了newSingleThreadScheduledExecutor
每隔一分钟检查反馈文件是否存在,但我不知道如何处理多个请求并为每个请求保持倒计时,以便在5分钟的情况下对其进行处理。
我的尝试:
ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(listPrinter.size()));
for(int i=0;i<list.size();i++){
try {
final File retrievedFile = new File("/home/"+list.get(i)+".csv");
ListenableFuture<File> future = executor.submit(new Callable<File>() {
public File call() {
// Actually send the file to your local server
// and retrieve a file back
if(retrievedFile.exists())
{
new Notification("file exits").show(Page.getCurrent());
}
else{
new Notification("file no exits").show(Page.getCurrent());
}
return retrievedFile;
}
});
future.get(5, TimeUnit.MINUTES);
} catch (InterruptedException ex) {
Exceptions.printStackTrace(ex);
} catch (ExecutionException ex) {
Exceptions.printStackTrace(ex);
} catch (TimeoutException ex) {
Exceptions.printStackTrace(ex);
new Notification("Time out").show(Page.getCurrent());
}
}
但是它只会在开头执行一次,之后添加文件时不会再有任何反应。
使用watchService
能否实现这个功能?对我来说这个方法非常有效,但我不知道5分钟的情况。
new Thread() { }.start()
不是非常健壮。ThreadPoolExecutor
可以让您控制线程数,当线程池已满时要使用的队列大小,以及其他一些不错的功能。 - fps