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

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

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

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

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

PS. Я имею ввиду шаблон Observer
...
Рейтинг: 0 / 0
12.07.2006, 16:07
    #33848685
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
он же Jozic1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :(
2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :(
2 - передавать в родительский поток ссылку на главный и вызывать метод главного (в котором будет регестрироваться ошибка)Немного не понятно, можно разъяснить? и лучше с кусочком кода :)
...
Рейтинг: 0 / 0
12.07.2006, 16:13
    #33848720
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
AndreySerjА чем не устраивает вариант с нотификацией?Вариант с вейт/нотифай означает, что главный поток будет ждать нотификейшн а не выполняцца, а хочецца все же многопоточности.
AndreySerjПередавай главному потоку к примеру ID дочернего потока и эксепшен.Как? пример если не затруднит.
...
Рейтинг: 0 / 0
12.07.2006, 16:17
    #33848742
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
Код: 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
12.07.2006, 16:48
    #33848885
AndreySerj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
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
12.07.2006, 17:23
    #33848988
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
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
12.07.2006, 17:26
    #33849001
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
AndreySerj Jozic AndreySerjА чем не устраивает вариант с нотификацией?Вариант с вейт/нотифай означает, что главный поток будет ждать нотификейшн а не выполняцца, а хочецца все же многопоточности.
AndreySerjПередавай главному потоку к примеру ID дочернего потока и эксепшен.Как? пример если не затруднит.

Я имел ввиду не wait/notify ....
Я хотел сказать следующее: нотифицировать главный поток сообщением от дочерних потоков, когда у них происходит эксепшен, в стиле паттерна Observer.
Очень схематично типа так:
...
Это тоже не работает, вы путатет класс Thread и поток выполнения. Если метод объявлен в классе SuperThread, это не значит что он выполницца только в потоке, который создацца с помощью этого класса.
смотрите мой предыдущий пост.
...
Рейтинг: 0 / 0
12.07.2006, 17:40
    #33849049
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
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
12.07.2006, 17:46
    #33849064
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
Timmпроясните тогда че означает "сообщить главному потоку". лучше пример. :) Я и спросил КАК? имелось ввиду не как реализовать а вообще, может кто сталкивался: JozicКак сообщить главному потоку об исключении? Есть подозрения что никак :(. Какие есть мысли у народа?
Если бы знал, не спрашивал :)
...
Рейтинг: 0 / 0
12.07.2006, 18:15
    #33849136
AciD_v
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
А сто собственно делает родительский поток?
Может все-таки он и должен все время следить, например, за какой-то очередью, в которую кладут сообщения об исключении дочерние потоки.
Тогда обработка исключений будет происходить в родительском потоке, а дочерние будут только добавлять их в очередь.
...
Рейтинг: 0 / 0
12.07.2006, 19:07
    #33849254
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Multi-Threaded Exception Handling
AciD_vА сто собственно делает родительский поток?
Ну к примеру, один поток (пусть родительский) инитит громоздкий ГУЙ, а второй (порожденный) пытаецца получить коннекшн к базе. Допустим сервер лежит - "кина не будет", ну и тут хотелось бы сказать родительскому потоку, который все еще усердно инитит ГУЙ, что все это он зря.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Multi-Threaded Exception Handling / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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