我必须检查一段代码(例如,调用第三方Web服务)是否在给定时间段内完成其执行。如果执行代码的输出未在给定时间内出现,则执行应该中断并且应将默认值传递给被调用对象。
如何在java中完成?
任何建议
答案 0 :(得分:0)
我的意见是你需要两个主题。
第一个线程是执行服务调用,第二个线程应该被调度为中断第一个。
第一线程:
public class ServiceCall implements Runnable {
public void run() {
serviceClient.callOperation();
}
}
第二线程:
public class Interruptor implements Runnable {
public Interruptor(Future<?> future) {
serviceCallFuture = future;
}
private Future<?> serviceCallFuture;
public void run() {
serviceCallFuture.cancel(false);
}
}
现在主要逻辑:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
Future<?> future = executor.submit(new ServiceCall());
// Schedule interruptor to cancel the thread after 10 seconds
executor.schedule(new Interruptor(future), 10, TimeUnit.SECONDS);