История изменений
Исправление 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));
}
}