LINUX.ORG.RU

История изменений

Исправление foror, (текущая версия) :

Исключения кидать мне разрешили

Кто этот авторитетный гуру? )

мне наоборот запретили

Я не говорю про Thread#stop, я говорю про FooBar#stop, код этого stop предоставил выше.

А проверять состояние я умею, но мне не надо.

Код в студию.

Ваш пример с попыткой в цикле не понял

Его код сокращенная версия моего кода FooBar, причем посты были добавлены независимо.

почему исключений надо бояться - тоже

Потому что делать выходы эксепшенами из рекурсии или вложеных функций - глупейшая затея, на уровне goto. Банально, где-то в будущем поставишь обработку исключений, где-то на одной из вложенной функции:

public void someInternalFunc() {
  try {
    ...
    someSubFunc();
  } catch(Throwable e) {
    ...
    // здесь ты конечно забудешь добавить throw new UserInterruptException(), а даже если и не забудешь, это будет загромождать код и выглядеть отстойно
  }
}

private void someSunFunc() {
   ...
   if (...)
      throw new UserInterruptException()
}

Как думаешь, что проийзодет в твоём коде ниже, когда someInternalFunc проглотит твой UserInterruptException:

    class InterThread extends Thread {
        public void run() {
            try {
                Object v = eval(globalEnv, lv);
                cout(true, v.toString());
            } catch (Throwable e) {
                cout(true, e.toString());
                Thread.currentThread().interrupt();
            }
            if (threadListModel.contains(this))
                threadListModel.remove(threadListModel.indexOf(this));
        }
    }

Исходная версия foror, :

Исключения кидать мне разрешили

Кто этот авторитетный гуру? )

мне наоборот запретили

Я не говорю про Thread#stop, я говорю про FooBar#stop, код этого stop предоставил выше.

А проверять состояние я умею, но мне не надо.

Код в студию.

Ваш пример с попыткой в цикле не понял

Его код сокращенная версия моего кода FooBar, причем посты были добавлены независимо.

почему исключений надо бояться - тоже

Потому что делать выходы эксепшенами из рекурсии или вложеных функций - глупейшая затея, на уровне goto. Банально, где-то в будущем поставишь обработку исключений, где-то на одной из вложенной функции:

public void someInternalFunc() {
  try {
    ...
  } catch(Throwable e) {
    ...
    // здесь ты конечно забудешь добавить throw new UserInterruptException(), а даже если и не забудешь, это будет загромождать код и выглядеть отстойно
  }
}

Как думаешь, что проийзодет в твоём коде ниже, когда someInternalFunc проглотит твой UserInterruptException:

    class InterThread extends Thread {
        public void run() {
            try {
                Object v = eval(globalEnv, lv);
                cout(true, v.toString());
            } catch (Throwable e) {
                cout(true, e.toString());
                Thread.currentThread().interrupt();
            }
            if (threadListModel.contains(this))
                threadListModel.remove(threadListModel.indexOf(this));
        }
    }