powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как забрать данные из потока
25 сообщений из 32, страница 1 из 2
Как забрать данные из потока
    #34060998
ENigMA2me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно забрать данные из отдельно выполняемого потока ?

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

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

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

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

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

Абсолютно монопенисуально - главный и зависимый, либо оба дочерние.
Ну какая разница-то?
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34061657
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дочерний и главный поток, что-то странное (или я?..)
Обычными методами синхронизации решается задача, смотреть в сторону задачи "писатель и читатель" - решений должно быть море в интернете.
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34061671
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во! человек дело сказал. Ну или нанимайте меня например :)
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34061675
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv
У автора проблема в том, чтобы понять - куда писать-то?
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34061681
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эээ, забыл пояснить: main это public static void метод, являющийся точкой входа в приложение, другими словами, вы описали две разные точки входа (скажем разными bat файлами запускаются jar №1 и jar №2). Именно из этого был сделан вывод о разных средах выполнения.
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34063106
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеПри инициализации дополнительного потока передать ему ссылку на главный поток и дергать какой-либо метод главного (типа "накачать данные") из дополнительного.
Что может быть проще?Интересно, как это будет выглядеть :) Как вы собираетесь "дернуть" метод другого потока? И что вообще значит метод другого потока?
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #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
Как забрать данные из потока
    #34063273
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, не будет проблем понять - как вызывать и метод основного (main'а).
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34063300
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кстати, автор надеюсь понял - нужно не забирать данные из потока, а поток должен передавать данные.
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34063445
ENigMA2me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
он жеДа, кстати, автор надеюсь понял - нужно не забирать данные из потока, а поток должен передавать данные.

Спасибо за то что откликнулись..... Я уже пробовал передавать данные в main но выдаёт ошибки я создавал отдельный класс для принятия данных как в main так и в другом классе. Выдавало ошибку что данные должны быть статик - ставил как просило потом уже в процессе запуска выдавало ошибку. Короче я запутался
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34063573
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.etu1362.spb.ru/ в информации лежать мои лабораторные работы к системам реального времени. Посмотрите, может поможет. Я их год назад делал.
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #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
Как забрать данные из потока
    #34063848
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мде... а код то можно ваш увидеть, а то чего тока не наплели...
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34063963
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JozicВо-первых у Runnable нет метода callme(), а во-вторых вызов метода callme() произойдет в текущем потоке, даже если этот метод - метод объекта Thread (имхо стоит называть вещи своими именами :) ). И в-третих достаточно иметь ссылку на объект данных чтобы получить эти данные, и совсем не обязательно знать каким образом эти данные изменяюцца - из текущего или из другого потока.
Во-первых, вы издеваетесь что-ли? При чем тут интерфейс Runnable? Я же пишу свой класс, его юзающий.
Во-вторых, что вы подразумеваете под текущим потоком?
В-третьих, вы вообще ап чем?
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34064137
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он же JozicВо-первых у Runnable нет метода callme(), а во-вторых вызов метода callme() произойдет в текущем потоке, даже если этот метод - метод объекта Thread (имхо стоит называть вещи своими именами :) ). И в-третих достаточно иметь ссылку на объект данных чтобы получить эти данные, и совсем не обязательно знать каким образом эти данные изменяюцца - из текущего или из другого потока.
Во-первых, вы издеваетесь что-ли? При чем тут интерфейс Runnable? Я же пишу свой класс, его юзающий.
Во-вторых, что вы подразумеваете под текущим потоком?
В-третьих, вы вообще ап чем?
Во-первых, не издеваюсь, а просто придолбался :):
Код: plaintext
1.
2.
Runnable r =  null ;
...
 if  (r !=  null ) r.callme();
это ваш код :)
Во-вторых: под текущим я понимаю, выполняющийся в данный момент поток. Но имелось в виду то, что в вашем примере вызвался метод объекта Х имплементирующего Раннбл, но не "метод другого потока". Можно ввестись в заблуждение, читая такое :)
В-третих, я о том что как уже ранее говорилось: LeonidvДочерний и главный поток, что-то странное (или я?..)
Обычными методами синхронизации решается задача, смотреть в сторону задачи "писатель и читатель" - решений должно быть море в интернете. при описанной автором схеме, можно найти более простое решение
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #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
Как забрать данные из потока
    #34072116
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В-общем, вы не представляет, что у вас происходит и почему, правда?

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

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

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

Главное - идея :)
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #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
Как забрать данные из потока
    #34072131
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, кстати, t.start() - это отнюдь не запуск метода run :)
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Как забрать данные из потока
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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