0

Я попросил об обнаружении проверенных исключений в контексте потока; принятым ответом было использование Callable и Future.Использование анонимной темы для ловушек Исключения

Но я понял, что могу просто обернуть «рабочий» метод анонимным потоком и поймать исключение, поскольку оно будет выполнено без потоков.

(логика работника была перенесена из нового класса, реализованного Callable к классу вызывающего абонента)

class BlaBla{ 

public void foo(){ 

Thread th = new Thread(new Runnable() { 
    public void run() { 
    try { 
    doWork(); 
    } catch (MyCheckedException e) { 
     dosomething(); 
    } 
    } 
}); 
th.start(); 
} 

public void dowork throws MyCheckedException{ 
} 

Есть ли какие-либо проблемы с этим подходом?

+0

Вопрос о том, есть ли проблема или нет, зависит от того, чего вы пытаетесь достичь. Почему вы не хотели ломать исключения в своей основной теме? – einpoklum

+1

Да, это нормально или вы можете использовать UncaughtExceptionHandler: http://stackoverflow.com/a/12409676/829571 – assylias

ответ

1

Да, это должно работать, пока вы знаете, что вы делаете в тех методах doWork и doSomething.

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

Было бы интересно узнать немного больше о том, что он делает, потому что, когда вы завершаете его в потоке, вам нужно подумать о том, как получать данные из этого потока в потокобезопасном режиме. Вероятно, есть простой и безопасный способ выполнить эту работу, но это зависит от ситуации.

+0

Я использую потокобезопасную сборку – yuris

+0

Тогда это, вероятно, будет работать нормально. – Brainstorm