我有以下代码,doTransaction方法在20秒后被调用,任何人都可以告诉我为什么花了这么长时间来调用doTransaction方法。 它的发生并非总是很少发生。对此有任何帮助表示赞赏。 谢谢,
ExecutorService service = Executors.newSingleThreadExecutor();
TransactionTask task = new TransactionTask(object);
Future<Result> future = service.submit(task);
Result r = future.get(20000, TimeUnit.MILLISECONDS);
class TransactionTask implements Callable<Result> {
private Request req = null;
public TransactionTask(Request trx){
this.req = trx;
}
@Override
public Result call() throws Exception {
Result o = doTransaction(req);
return o;
}
}
答案 0 :(得分:0)
如果您提交多个任务,可以解释上述行为。
您创建的ExecutorService
是单线程的,因此它只能同时执行一个任务。如果提交的其他任务将在队列中,并且如果前任务为terminated/completed
它仅在20秒后执行,因为在future.get(20000, TimeUnit.MILLISECONDS);
中您取消了已在运行的任务。你可以检查一下你没有得到CancellationException
。
修改强>
由于您使用的是执行中并发的Tomcat,我建议您使用多线程而不是单线程(如果没有必要): - Executors.newFixedThreadPool(N);
用于同时执行N个任务并增加时间