Есть ли недостатки в реализации этого времени сторожевой собаки? - PullRequest
0 голосов
/ 28 октября 2018

Есть ли у этого кода какой-либо серьезный дефект в использовании потока?Моя цель состоит в том, чтобы добавить монитор времени, чтобы контролировать максимальное время, которое разрешено возвращать ответ.Максимальное время устанавливается с помощью WATCH_DOG_TIME_LIMIT.Если время обработки превышает его, оно истечет время ожидания и вернет ответ по умолчанию.

public SimilarityResponse getSimilarity(InputInfo questionInput) {

        Preconditions.checkNotNull(questionInput);

        Callable<SimilarityResponse> queryTask = () -> similarityService.computeSimilarity(questionInput);
        Future<SimilarityResponse> futureTask = executorService.submit(queryTask);
        try {
            SimilarityResponse response = futureTask.get(WATCH_DOG_TIME_LIMIT, TimeUnit.MILLISECONDS);
            LOGGER.info("AfterExtraction(): {}", questionInput);
            return response;
        } catch (InterruptedException ie) {
            ie.printStackTrace();
        } catch (ExecutionException ee) {
            ee.printStackTrace();
        } catch (TimeoutException te) {
            futureTask.cancel(true);
            LOGGER.warn("QE L0 tiring: {} {}", WATCH_DOG_TIME_LIMIT, questionInput);
        }

        // Only when timeout occurs, execute this.
        SimilarityResponse sr = new SimilarityResponse();
        sr.setSku(questionInput.getSku());
        sr.setText(questionInput.getQuestion());
        return sr;

    }

И 2-й вопрос, если нет проблемы с корректностью, есть ли проблема эффективности?Эта функция должна быть вызвана снова и снова.Каждый вызов создает новый экземпляр Callable.Это хорошо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...