Как правильно использовать Fork/Join Framework?

Я пишу простую программу с Fork/Join Framework. Для первой версии моей программы, которая не работает правильно, я использовал книгу "Герберт Щит. Java 7", для второй - я использовал Google. Пожалуйста, помогите мне понять, почему код, как в книге, не работает правильно?? Какая разница??

V1:

if (to - from < range) {
  for (int i = from; i < to; i++) {
    int result = checker.checkCode(i);
    if (result != CodeChecker.INCORRECT_CODE) {
      stop.set(true);
      return result;
    }
  }
  return CodeChecker.INCORRECT_CODE;
 } else {
   int            middle = (int) (((long) from + to) >> 1);
   BruteForceTask left;
   BruteForceTask right;
   left = new BruteForceTask(uri, from, middle, range, checker);
   right = new BruteForceTask(uri, middle, to, range, checker);
   left.fork();
   right.fork();
   int leftResult = left.join();
   int rightResult = right.join();
   return leftResult != CodeChecker.INCORRECT_CODE ? leftResult : rightResult;
 }

V2:

else {
   int            middle = (int) (((long) from + to) >> 1);
   BruteForceTask left;
   BruteForceTask right;
   left = new BruteForceTask(uri, from, middle, range, checker);
   right = new BruteForceTask(uri, middle, to, range, checker);
   left.fork();
   int rightResult = right.invoke();
   int leftResult = left.join();
   return leftResult != CodeChecker.INCORRECT_CODE ? leftResult : rightResult;
 }

Главный:

ForkJoinPool   pool       = new ForkJoinPool();
BruteForceTask bruteForce = null;
bruteForce = new BruteForceTask(uri, from, to, range, codeChecker);
result = pool.invoke(bruteForce);

0 ответов

Другие вопросы по тегам