powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как забрать данные из потока
7 сообщений из 32, страница 2 из 2
Как забрать данные из потока
    #34072172
ENigMA2me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
он жеИ, кстати, t.start() - это отнюдь не запуск метода run :)

Странно а в книге Г. Шилда написано что start() выполняет вызов метода run()....

ну да это не главное, на самом деле я действительно думал, что как только поток запущен из него можно забирать инфу. Какими методами мне нужно сделать проверку на доступность данных из потока. Знаю проверку на отработку завершения потока. Просто этот поток должен крутится бесконечно и через определённые интервалы обновлять информацию. А эту информацию мне нужно потом использовать.

Подскажите как сделать так чтобы ожидать записи информации..... Если не хотите раскрывать хитрые коды просто напишите чем пользоваться - а дальше буду умные книги читать....
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34072201
ENigMA2me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот добавил следующий код в main():

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 try 
        {
            Thread.sleep( 10000 );
        }
         catch  (InterruptedException e)
        {
            System.out.println("11111");
        }
         try 
        {
            t1.t.join();
        }
         catch (InterruptedException ie)
        {
            System.out.println("22222");
        }
        System.out.println(t1.A1[ 0 ] + " " + t1.A1[ 1 ] + " " + t1.A1[ 2 ] + " " + t1.A1[ 3 ] + " " + t1.A1[ 4 ]);

теперь показывает как надо, но как сделать чтобы данные обновлялись и их в любой момент можно забирать не дожидаясь завершения потока ? У меня будет бесконечный цикл в потоке - типо обновление инфы через заданный промежуток времени.....
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34072207
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ENigMA2me
Странно а в книге Г. Шилда написано что start() выполняет вызов метода run()....

Как бы вам сказать...
Предназначение Thread - выполнение потока параллельно с текущим (грубо говоря). Вы стартуете Thread и он начинает работать в фоне (опять грубо говоря). Т.е. вызывается t.start() и тут же передается управление дальше по тексту. А вы сначала выводите чиселки, и только потом поток в фоне обновит static массив. Вот и получается совсем не то, что ожидается.


Не буду буферизовать.


Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
 import  java.util.concurrent.locks.*;

 public   class  ThreadsSample {
     public   static   void  main(String args[]){

         new  Thread( new  ProcessorThread()).start();
         new  Thread( new  DrawerThread()).start();
    }
    
     private   static   boolean  ready = false;
     private   static   double  data = 0d;
     private   static  Lock readyLock =  new  ReentrantLock();
    
    
     public   static   void  putData( double  number){
        System.out.println("I received " + number + " and ready to proceed");
        readyLock.lock();
         try {
            ready = true;
            data = number;
        }  finally  {
          readyLock.unlock();
        }
    }
    
     public   static   boolean  getReady(){
        readyLock.lock();
         try {
             return  ready;
        }  finally  {
          readyLock.unlock();
        }
    }
    
     public   static   double  getData(){
        readyLock.lock();
         try {
            ready = false;
             return  data;
        }  finally  {
          readyLock.unlock();
        }
    }

}

 class  ProcessorThread  implements  Runnable {
     public   void  run(){
         try {
             while  (true) {
                ThreadsSample.putData(Math.random());
                Thread.sleep( 1000 );
            }
        }  catch  (InterruptedException e){
            e.printStackTrace();
        }
    }
}

 class  DrawerThread  implements  Runnable {
     public   void  run(){
         try {
             while  (true) {
                 if  (ThreadsSample.getReady()) {
                     double  data = ThreadsSample.getData();
                    System.out.println("We got something new :) = " + data);
                }
                Thread.sleep( 300 );
            }
        }  catch  (InterruptedException e){
            e.printStackTrace();
        }
    }
}
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34072208
ENigMA2me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мда, вот что значит посоветоваться со стаей товарищей - предложили мне вариант и я его малость доработал. Сделать поток без цикла внутри, а сам вызов потока сделать в цикле и внутри цикла ожидать завершения потока и принятия данных. Теперь должно быть всё в шоколаде. Спасибо всем за вашу помощь и поддержку.
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34072209
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ENigMA2meМда, вот что значит посоветоваться со стаей товарищей - предложили мне вариант и я его малость доработал. Сделать поток без цикла внутри, а сам вызов потока сделать в цикле и внутри цикла ожидать завершения потока и принятия данных. Теперь должно быть всё в шоколаде. Спасибо всем за вашу помощь и поддержку.
Не дай вам бог так писать :(
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34072210
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем тогда вообще вам поток-то???
...
Рейтинг: 0 / 0
Как забрать данные из потока
    #34072218
ENigMA2me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваш примерчик увидел уже после своего ответа :( Он грамотнее. А поток - чтобы вычисления проводились без вмешательства, чтобы всегда были свежие данные, автоматизация процесса..... чтобы из других мест программы обращаться к данным которые периодически обновляются. Понятно что я предложил не лучший вариант, но я только учусь правильно писать - для того и существуют советы на форумах. С потоками я раньше не работал поэтому как заново открываю программирование.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Как забрать данные из потока
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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