@Override
    protected void updateTestGeneratorByNewTest(final Test acceptedTest) {
        possibleTestsList.remove(acceptedTest);

        final List<Callable<Object>> tasks = new LinkedList<Callable<Object>>();

        for (int i = 0; i < possibleTestsList.size(); i += MIN_TESTS_COUNT_TO_EXECUTE) {

            final int finalI = i;

            tasks.add(Executors.callable(new Runnable() {
                @Override
                public void run() {
                    for (int j = 0; j < MIN_TESTS_COUNT_TO_EXECUTE; j++) {

                        final SmartTest test = possibleTestsList.get(finalI + j);

                        for (int i = 0; i < template.getAnswerGroups().size(); i++) {

                            AnswerGroup answerGroup = template.getAnswerGroups().get(i);

                            boolean contains = true;
                            for (Answer answer : answerGroup.getAnswers()) {
                                if (test.getAnswer(answer.getQuestionNumber())
                                        != acceptedTest.getAnswer(answer.getQuestionNumber())) {
                                    contains = false;
                                    break;
                                }
                            }

                            if (contains) {
                                if (test.isAnswerGroupUnchecked(i)) {
                                    test.setQuality(test.getQuality() - answerGroup.getProbability());
                                    test.setAnswerGroupChecked(i, false);
                                }

                            } else {
                                i = transitions[i] - 1;
                            }
                        }
                    }
                }
            }));
        }

        try {
            service.invokeAll(tasks);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }