powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Multi-Threaded Exception Handling
17 сообщений из 17, страница 1 из 1
Multi-Threaded Exception Handling
    #33847712
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброе время суток.

Есть пул потоков, которым управляет главный поток. Возникают ситуации, когда в одном из потоков возникает исключение, о котором стоит сообщить главному потоку. Вариант - когда главный поток постоянно оглядываецца не "упал" ли кто - не подходит. Как сообщить главному потоку об исключении? Есть подозрения что никак :(. Какие есть мысли у народа?

Спасибо :)
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33847822
vndovr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Сохранять информацию о ошибке где-либо и из главного потока опрашивать состояние этого "где-либо"
2. Если в главный покоток можно посылать сообщения (к примеру используется паттерн Command - тогда просто слать сообщение с полной информацией о ошибке :)
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848017
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vndovr1. Сохранять информацию о ошибке где-либо и из главного потока опрашивать состояние этого "где-либо"
2. Если в главный покоток можно посылать сообщения (к примеру используется паттерн Command - тогда просто слать сообщение с полной информацией о ошибке :)
1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :(
2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :(
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848160
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jozic1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :(
2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :(
2 - передавать в родительский поток ссылку на главный и вызывать метод главного (в котором будет регестрироваться ошибка)
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848322
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он же Jozic1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :(
2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :(
2 - передавать в родительский поток ссылку на главный и вызывать метод главного (в котором будет регестрироваться ошибка)
+1
только лучше передавать какой то другой объект (handler).
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848423
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jozic vndovr1. Сохранять информацию о ошибке где-либо и из главного потока опрашивать состояние этого "где-либо"
2. Если в главный покоток можно посылать сообщения (к примеру используется паттерн Command - тогда просто слать сообщение с полной информацией о ошибке :)
1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :(
2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :(

А чем не устраивает вариант с нотификацией? Передавай главному потоку к примеру ID дочернего потока и эксепшен.
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848442
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreySerj Jozic vndovr1. Сохранять информацию о ошибке где-либо и из главного потока опрашивать состояние этого "где-либо"
2. Если в главный покоток можно посылать сообщения (к примеру используется паттерн Command - тогда просто слать сообщение с полной информацией о ошибке :)
1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :(
2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :(

А чем не устраивает вариант с нотификацией? Передавай главному потоку к примеру ID дочернего потока и эксепшен.

PS. Я имею ввиду шаблон Observer
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848685
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он же Jozic1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :(
2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :(
2 - передавать в родительский поток ссылку на главный и вызывать метод главного (в котором будет регестрироваться ошибка)Немного не понятно, можно разъяснить? и лучше с кусочком кода :)
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848720
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreySerjА чем не устраивает вариант с нотификацией?Вариант с вейт/нотифай означает, что главный поток будет ждать нотификейшн а не выполняцца, а хочецца все же многопоточности.
AndreySerjПередавай главному потоку к примеру ID дочернего потока и эксепшен.Как? пример если не затруднит.
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848742
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
 public   class  ThreadMonitor
{
      public   void  startThreads(....)
     {
           for  (...)
          {
                 new  MyThread(...,  new  ExceptionHandler(...) {
                     public   void  onException(Exception e)
                    {
                         //do your work here
                    }
                }).start();
          }
     }
};

 interface  ExceptionHandler
{
     public   void  onException(Exception e);
}

 class  MyThread  extends  Thread
{
    ExceptionHandler eh
     public  MyClass(..., ExceptionHandler eh)
    {
         this .eh = eh;
    }
    
     public   void  run()
    {
         try 
        {
             //...
        }
         catch  (SomeException s)
        {
             eh.onException(s);
              throw  s;
        }
    }
}
так пойдет?
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848885
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jozic AndreySerjА чем не устраивает вариант с нотификацией?Вариант с вейт/нотифай означает, что главный поток будет ждать нотификейшн а не выполняцца, а хочецца все же многопоточности.
AndreySerjПередавай главному потоку к примеру ID дочернего потока и эксепшен.Как? пример если не затруднит.

Я имел ввиду не wait/notify ....
Я хотел сказать следующее: нотифицировать главный поток сообщением от дочерних потоков, когда у них происходит эксепшен, в стиле паттерна Observer.
Очень схематично типа так:

interface Listener {
void actionPerformed(int id, Exception e);
}

class MainThread implements Listener {
int count = 0;

void actionPerformed(int id, Exception e) {
processException();
}

void runNewChildThread() {
ChildThread ch = new ChildThread(++count);
ch.setListener(this);
ch.start();
}

.........
}

class ChildThread extends Thread {
int id;
Listener listener;

puclic ChildThread(int id) {
this.id = id;
}

void setListener(Listener listener) {
this.listener = listener;
}

.....

здесь эксэпшен ->
} catch(Exception e) {
listener.actionPerformed(id, e);
....
}


}
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33848988
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
 public   class  ThreadMonitor
{
      public   void  startThreads(....)
     {
           for  (...)
          {
                 new  MyThread(...,  new  ExceptionHandler(...) {
                     public   void  onException(Exception e)
                    {
                         //do your work here
                    }
                }).start();
          }
     }
};

 interface  ExceptionHandler
{
     public   void  onException(Exception e);
}

 class  MyThread  extends  Thread
{
    ExceptionHandler eh
     public  MyClass(..., ExceptionHandler eh)
    {
         this .eh = eh;
    }
    
     public   void  run()
    {
         try 
        {
             //...
        }
         catch  (SomeException s)
        {
             eh.onException(s);
              throw  s;
        }
    }
}
так пойдет?неа, а вы сами пробовали это запускать? И как? :)
метод onException выполницца в потоке, который вызвал исключение, а родительский поток который стартовал поток с исключением, продолжит работу как не в чем не бывало
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33849001
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreySerj Jozic AndreySerjА чем не устраивает вариант с нотификацией?Вариант с вейт/нотифай означает, что главный поток будет ждать нотификейшн а не выполняцца, а хочецца все же многопоточности.
AndreySerjПередавай главному потоку к примеру ID дочернего потока и эксепшен.Как? пример если не затруднит.

Я имел ввиду не wait/notify ....
Я хотел сказать следующее: нотифицировать главный поток сообщением от дочерних потоков, когда у них происходит эксепшен, в стиле паттерна Observer.
Очень схематично типа так:
...
Это тоже не работает, вы путатет класс Thread и поток выполнения. Если метод объявлен в классе SuperThread, это не значит что он выполницца только в потоке, который создацца с помощью этого класса.
смотрите мой предыдущий пост.
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33849049
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jozic Timm
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
 public   class  ThreadMonitor
{
      public   void  startThreads(....)
     {
           for  (...)
          {
                 new  MyThread(...,  new  ExceptionHandler(...) {
                     public   void  onException(Exception e)
                    {
                         //do your work here
                    }
                }).start();
          }
     }
};

 interface  ExceptionHandler
{
     public   void  onException(Exception e);
}

 class  MyThread  extends  Thread
{
    ExceptionHandler eh
     public  MyClass(..., ExceptionHandler eh)
    {
         this .eh = eh;
    }
    
     public   void  run()
    {
         try 
        {
             //...
        }
         catch  (SomeException s)
        {
             eh.onException(s);
              throw  s;
        }
    }
}
так пойдет?неа, а вы сами пробовали это запускать? И как? :)

неа. я здесь писал.
JozicКак сообщить главному потоку об исключении?
Jozicметод onException выполницца в потоке, который вызвал исключение, а родительский поток который стартовал поток с исключением, продолжит работу как не в чем не бывало
проясните тогда че означает "сообщить главному потоку". лучше пример.
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33849064
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timmпроясните тогда че означает "сообщить главному потоку". лучше пример. :) Я и спросил КАК? имелось ввиду не как реализовать а вообще, может кто сталкивался: JozicКак сообщить главному потоку об исключении? Есть подозрения что никак :(. Какие есть мысли у народа?
Если бы знал, не спрашивал :)
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33849136
AciD_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сто собственно делает родительский поток?
Может все-таки он и должен все время следить, например, за какой-то очередью, в которую кладут сообщения об исключении дочерние потоки.
Тогда обработка исключений будет происходить в родительском потоке, а дочерние будут только добавлять их в очередь.
...
Рейтинг: 0 / 0
Multi-Threaded Exception Handling
    #33849254
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AciD_vА сто собственно делает родительский поток?
Ну к примеру, один поток (пусть родительский) инитит громоздкий ГУЙ, а второй (порожденный) пытаецца получить коннекшн к базе. Допустим сервер лежит - "кина не будет", ну и тут хотелось бы сказать родительскому потоку, который все еще усердно инитит ГУЙ, что все это он зря.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Multi-Threaded Exception Handling
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]