Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как забрать данные из потока / 25 сообщений из 32, страница 1 из 2
17.10.2006, 17:08:16
    #34060998
ENigMA2me
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
Как можно забрать данные из отдельно выполняемого потока ?

Структура программы примерно следующая:

Main -> Обновление данных по схемам
Main -> Ожидание данных для обработки и их обработка по заданной схеме

То есть поток выполняется бесконечно - как из него передать информацию туда откуда он вызывался ? Чтобы потом уже можно было работать с этой информацией.
...
Рейтинг: 0 / 0
17.10.2006, 17:10:17
    #34061013
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
из отдельно работающей ява машины вы наверное имели ввиду? тогда RMI вам поможет.
...
Рейтинг: 0 / 0
17.10.2006, 17:15:44
    #34061051
ENigMA2me
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
не совсем понял ? Прога будет выполнятся на одной виртуальной машине а что за RMI, простите не знаю что это.....
...
Рейтинг: 0 / 0
17.10.2006, 18:11:26
    #34061362
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
При инициализации дополнительного потока передать ему ссылку на главный поток и дергать какой-либо метод главного (типа "накачать данные") из дополнительного.
Что может быть проще?
...
Рейтинг: 0 / 0
17.10.2006, 18:22:22
    #34061410
muchacho
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
он жеПри инициализации дополнительного потока передать ему ссылку на главный поток и дергать какой-либо метод главного (типа "накачать данные") из дополнительного.
Что может быть проще?

по-моему у него нету главного и дополнительного потока.

автор
Main -> Обновление данных по схемам
Main -> Ожидание данных для обработки и их обработка по заданной схеме
...
Рейтинг: 0 / 0
17.10.2006, 18:43:36
    #34061496
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
muchacho
по-моему у него нету главного и дополнительного потока.

Абсолютно монопенисуально - главный и зависимый, либо оба дочерние.
Ну какая разница-то?
...
Рейтинг: 0 / 0
17.10.2006, 19:51:36
    #34061657
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
Дочерний и главный поток, что-то странное (или я?..)
Обычными методами синхронизации решается задача, смотреть в сторону задачи "писатель и читатель" - решений должно быть море в интернете.
...
Рейтинг: 0 / 0
17.10.2006, 19:58:17
    #34061671
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
во! человек дело сказал. Ну или нанимайте меня например :)
...
Рейтинг: 0 / 0
17.10.2006, 20:00:41
    #34061675
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
Leonidv
У автора проблема в том, чтобы понять - куда писать-то?
...
Рейтинг: 0 / 0
17.10.2006, 20:02:21
    #34061681
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
эээ, забыл пояснить: main это public static void метод, являющийся точкой входа в приложение, другими словами, вы описали две разные точки входа (скажем разными bat файлами запускаются jar №1 и jar №2). Именно из этого был сделан вывод о разных средах выполнения.
...
Рейтинг: 0 / 0
18.10.2006, 12:29:09
    #34063106
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
он жеПри инициализации дополнительного потока передать ему ссылку на главный поток и дергать какой-либо метод главного (типа "накачать данные") из дополнительного.
Что может быть проще?Интересно, как это будет выглядеть :) Как вы собираетесь "дернуть" метод другого потока? И что вообще значит метод другого потока?
...
Рейтинг: 0 / 0
18.10.2006, 13:05:01
    #34063271
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
JozicИнтересно, как это будет выглядеть :) Как вы собираетесь "дернуть" метод другого потока? И что вообще значит метод другого потока?
Если мы имеем в виде поток Thread (а я лично его и имею в виду) - элементарно.

Код: 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.
 class  X  implements  Runnable {
Runnable r =  null ;
  public  X (Runnable iface){
  this .r = iface;
}
  public   void  run(){
...
  if  (r !=  null ) r.callme();
...
 }
  public   void  callme(){
...  do  something
 }
}


{
 Runnable run1 =  new  X( null );
 Runnable run2 =  new  X(run1);
 
 Thread thread1 =  new  Thread(run1);
 Thread thread2 =  new  Thread(run2);
 
 thread1.start();
 thread2.start();
}
...
Рейтинг: 0 / 0
18.10.2006, 13:05:33
    #34063273
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
Я думаю, не будет проблем понять - как вызывать и метод основного (main'а).
...
Рейтинг: 0 / 0
18.10.2006, 13:12:07
    #34063300
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
Да, кстати, автор надеюсь понял - нужно не забирать данные из потока, а поток должен передавать данные.
...
Рейтинг: 0 / 0
18.10.2006, 13:53:04
    #34063445
ENigMA2me
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
он жеДа, кстати, автор надеюсь понял - нужно не забирать данные из потока, а поток должен передавать данные.

Спасибо за то что откликнулись..... Я уже пробовал передавать данные в main но выдаёт ошибки я создавал отдельный класс для принятия данных как в main так и в другом классе. Выдавало ошибку что данные должны быть статик - ставил как просило потом уже в процессе запуска выдавало ошибку. Короче я запутался
...
Рейтинг: 0 / 0
18.10.2006, 14:24:11
    #34063573
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
http://www.etu1362.spb.ru/ в информации лежать мои лабораторные работы к системам реального времени. Посмотрите, может поможет. Я их год назад делал.
...
Рейтинг: 0 / 0
18.10.2006, 14:43:00
    #34063672
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
он же JozicИнтересно, как это будет выглядеть :) Как вы собираетесь "дернуть" метод другого потока? И что вообще значит метод другого потока?
Если мы имеем в виде поток Thread (а я лично его и имею в виду) - элементарно.

Код: 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.
 class  X  implements  Runnable {
Runnable r =  null ;
  public  X (Runnable iface){
  this .r = iface;
}
  public   void  run(){
...
  if  (r !=  null ) r.callme();
...
 }
  public   void  callme(){
...  do  something
 }
}


{
 Runnable run1 =  new  X( null );
 Runnable run2 =  new  X(run1);
 
 Thread thread1 =  new  Thread(run1);
 Thread thread2 =  new  Thread(run2);
 
 thread1.start();
 thread2.start();
}
Во-первых у Runnable нет метода callme(), а во-вторых вызов метода callme() произойдет в текущем потоке, даже если этот метод - метод объекта Thread (имхо стоит называть вещи своими именами :) ). И в-третих достаточно иметь ссылку на объект данных чтобы получить эти данные, и совсем не обязательно знать каким образом эти данные изменяюцца - из текущего или из другого потока.
...
Рейтинг: 0 / 0
18.10.2006, 15:20:20
    #34063848
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
мде... а код то можно ваш увидеть, а то чего тока не наплели...
...
Рейтинг: 0 / 0
18.10.2006, 15:47:13
    #34063963
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
JozicВо-первых у Runnable нет метода callme(), а во-вторых вызов метода callme() произойдет в текущем потоке, даже если этот метод - метод объекта Thread (имхо стоит называть вещи своими именами :) ). И в-третих достаточно иметь ссылку на объект данных чтобы получить эти данные, и совсем не обязательно знать каким образом эти данные изменяюцца - из текущего или из другого потока.
Во-первых, вы издеваетесь что-ли? При чем тут интерфейс Runnable? Я же пишу свой класс, его юзающий.
Во-вторых, что вы подразумеваете под текущим потоком?
В-третьих, вы вообще ап чем?
...
Рейтинг: 0 / 0
18.10.2006, 16:20:22
    #34064137
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
он же JozicВо-первых у Runnable нет метода callme(), а во-вторых вызов метода callme() произойдет в текущем потоке, даже если этот метод - метод объекта Thread (имхо стоит называть вещи своими именами :) ). И в-третих достаточно иметь ссылку на объект данных чтобы получить эти данные, и совсем не обязательно знать каким образом эти данные изменяюцца - из текущего или из другого потока.
Во-первых, вы издеваетесь что-ли? При чем тут интерфейс Runnable? Я же пишу свой класс, его юзающий.
Во-вторых, что вы подразумеваете под текущим потоком?
В-третьих, вы вообще ап чем?
Во-первых, не издеваюсь, а просто придолбался :):
Код: plaintext
1.
2.
Runnable r =  null ;
...
 if  (r !=  null ) r.callme();
это ваш код :)
Во-вторых: под текущим я понимаю, выполняющийся в данный момент поток. Но имелось в виду то, что в вашем примере вызвался метод объекта Х имплементирующего Раннбл, но не "метод другого потока". Можно ввестись в заблуждение, читая такое :)
В-третих, я о том что как уже ранее говорилось: LeonidvДочерний и главный поток, что-то странное (или я?..)
Обычными методами синхронизации решается задача, смотреть в сторону задачи "писатель и читатель" - решений должно быть море в интернете. при описанной автором схеме, можно найти более простое решение
...
Рейтинг: 0 / 0
21.10.2006, 22:52:37
    #34072115
ENigMA2me
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
Я решил сделать отдельный проект просто для тестирования работы потока.....

main класс

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
/*
 * Date: 21.10.2006
*/

 public   class  Main {
     public   static   int  M1[] =  new   int [ 5 ];
     public   static   void  main(String args[])
    {
        //int M1[] = new int[5];
        //int M2[] = new int[5];
        //int M3[] = new int[5];
        //int M1[] = {0,0,0,0,0};

        T1 t1 =  new  T1("New Thread");
         int  a = M1[ 0 ];
         int  b = M1[ 1 ];
         int  c = M1[ 2 ];
         int  d = M1[ 3 ];
         int  e = M1[ 4 ];
        System.out.println("Array M1 = " + a + " " + b + " " + c + " " + d + " " + e);
    }
}

класс потока

Код: 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.
/*
 * Date: 21.10.2006
*/

 public   class  T1  implements  Runnable{
    String name;
    Thread t;

    T1(String thread_name)
    {
        name = thread_name;
        t =  new  Thread( this , name);
        System.out.println("Новое имя потока: " + t);
        t.start();//запуск метода run()
    }

     public   void  run()
    {
         try 
        {
             for ( int  i= 0 ;i< 5 ;i++)
            {
                Main.M1[i] = i;
                Thread.sleep( 1000 );
            }
        }
         catch (InterruptedException e)
        {
            System.out.println(name + ":" + "неожиданно завершён");
        }
        System.out.println(name + ":" + "завершён нормально");
    }
}

и в итоге интересная ситуация..... просто запуская программу получаем в консоли

Новое имя потока: Thread[New Thread,5,main]
New Thread:завершён нормально
Array M1 = 0 0 0 0 0

при запуске через дебагер при просмотре как что и куда пишется получаем....

Новое имя потока: Thread[New Thread,5,main]
New Thread:завершён нормально
Array M1 = 0 1 2 3 4

в чём здесь ошибка почему я не могу вывести данные при простом запуске ????
...
Рейтинг: 0 / 0
21.10.2006, 23:01:24
    #34072116
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
В-общем, вы не представляет, что у вас происходит и почему, правда?

У вас есть два пути.

а) Купить (скачать, открыть имеющуюся) книгу по основам Java (раздел потоки) и прочитать про то, как там всё функционируют. Это хорошо, т.к. вы научитесь и в будущем будете работать, зная...

б) Я могу вам привести работающий пример того, как нужно передавать данные. Это плохо, т.к. вы просто схаваете готовое решение и скоро всё забудете.
...
Рейтинг: 0 / 0
21.10.2006, 23:03:21
    #34072119
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
Jozic Но имелось в виду то, что в вашем примере вызвался метод объекта Х имплементирующего Раннбл, но не "метод другого потока". Можно ввестись в заблуждение, читая такое :)

Главное - идея :)
...
Рейтинг: 0 / 0
21.10.2006, 23:11:14
    #34072130
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
ENigMA2meв чём здесь ошибка почему я не могу вывести данные при простом запуске ????
Скажу лишь, что главная ошибка - ожидание того, что данные немедленно будут доступны сразу после создания объекта new T1("New Thread").
И, кстати, надпись на экране должна быть вида (порядок следования)

New name: Thread[New Thread,5,main]
Array M1 = 0 0 0 0 0
New Thread:success

что логично, а не

ENigMA2me
Новое имя потока: Thread[New Thread,5,main]
New Thread:завершён нормально
Array M1 = 0 0 0 0 0
...
Рейтинг: 0 / 0
21.10.2006, 23:12:11
    #34072131
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как забрать данные из потока
И, кстати, t.start() - это отнюдь не запуск метода run :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как забрать данные из потока / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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