2016-12-12 1 views
0

У меня под кодом, метод doTransaction вызывается через 20 секунд, может ли кто-нибудь сказать мне, почему его так долго нужно вызвать метод doTransaction. Не всегда случается, что это происходит очень редко. Любая помощь по этому поводу ценится. Спасибо,Executerservice отправляет задание после кода

 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

Спасибо за быстрый ответ. Задача отправляется только один раз и одна задача за раз, код находится на сервере Tomcat, над кодом будет вызываться один раз за запрос. T – anil

+0

Tomcat обрабатывает каждый запрос одновременно, создаете ли вы ExecutorService для каждого запроса. Если нет, то это то, что несколько задач создаются и передаются tomcat в одной службе. –

ответ

0

Такое поведение может быть объяснено, если вы отправляете несколько задач.

Созданный вами ExecutorService однопоточный, поэтому он может выполнять только одну задачу одновременно. Другие задачи, если они отправлены, будут находиться в очереди и будут запущены, если первая задача - terminated/completed

Выполняется только через 20 секунд, так как в future.get(20000, TimeUnit.MILLISECONDS); вы отменяете уже запущенную задачу. Не могли бы вы проверить, что вы не получаете CancellationException.

Edit: Поскольку вы используете Tomcat, которая одновременно в исполнении, я хотел бы предложить, вы использовать многопоточный вместо одной нити, если нет необходимости: - Executors.newFixedThreadPool(N); за то, что N задач, выполняющихся одновременно и увеличить timout

Смежные вопросы