Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 130
1

Как забрать данные из отработавшего потока?

16.10.2014, 14:41. Просмотров 1411. Ответов 22
Метки нет (Все метки)

Код в потоке сгенерил массив интов и завершился.Как забрать данные?
ЗЫ:в жабе есть какой то аналог WaitForSingleObject ?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2014, 14:41
Ответы с готовыми решениями:

Как забрать данные из ячейки?
Проблема состоит в том что у меня есть две таблицы и при выборе в первой таблице поле со второй...

Как забрать данные из ActionListener
День добрый, интересует как забрать данные из ActionListener? По нажатию кнопки забираю данные из...

Как забрать из clipboard данные?
Подскажите, плиз, как забрать из буфера обмена (clipboard) данные? Я пользуюсь...

Как забрать данные из ссылки?
Подскажите пожалуйста, есть сайт с такой ссылкой. https://site.ru?num=121241&id=2512 Как забрать...

Как правильно забрать данные
Доброе вечер, уважаемые форумчане!) Столкнулся с токой проблемой, что не знаю как ПРАВИЛЬНО...

22
YuraAAA
1581 / 1321 / 283
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
16.10.2014, 14:52 2
yotsi, Handler/Async task.
0
Pablito
2860 / 2273 / 767
Регистрация: 12.05.2014
Сообщений: 7,978
Завершенные тесты: 1
16.10.2014, 14:58 3
или http://docs.oracle.com/javase/7/docs...utureTask.html
0
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 130
16.10.2014, 15:10  [ТС] 4
А если Thread наследовать то ни как?
0
16.10.2014, 15:10
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.10.2014, 16:42 5
yotsi, можете использовать интерфейс Callable он подразумевает возврат результата.
0
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 130
16.10.2014, 20:28  [ТС] 6
Цитата Сообщение от KillAndEat Посмотреть сообщение
Callable
Костыль настолько зверский что нигде нету понятных примеров((((
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.10.2014, 23:00 7
yotsi, почему костыль? Довольно удобный интерфейс.

Что там непонятного? Для начала нужно создать объект
Java
1
Future<возвращаемый тип данных> f
, далее создать экзекутор
Java
1
ExecutorService executorService  = Executors.newFixedThreadPool(5);//например
, потом все это дело нужно запустить
Java
1
2
3
4
f = executorService.submit(new Callable<возвращаемый тип данных>() {
            @Override
            public возвращаемый тип данных call(){}
});
ну и затем вытащить из Future результат путем вызова метода get();(этот метод лочит выполнение программы до отработки Callable), или подождать отработки вот таким способом
Java
1
2
3
while (!f.isDone()){
            //w8
        }
а затем при помощи того же get() вытащить результат
0
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 130
16.10.2014, 23:05  [ТС] 8
Цитата Сообщение от KillAndEat Посмотреть сообщение
Довольно удобный интерфейс
Удобно это когда есть полноценный указатель на память,а не ООП изврат
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.10.2014, 23:41 9
yotsi, в таком случае рекомендую Вам вернуться в С
0
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 130
17.10.2014, 15:46  [ТС] 10
1.Что есть "экзекутор" ?
2.Что если потоков несколько?
3.Не вижу абсолютной никакой связи между данными в классе потока и этим "Future".
ЗЫ: вообще самый непонятный пример по "Callable" что я когда либо видел.
0
YuraAAA
1581 / 1321 / 283
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
17.10.2014, 15:48 11
yotsi, загляните в соседнюю тему

Добавлено через 51 секунду
Цитата Сообщение от yotsi Посмотреть сообщение
1.Что есть "экзекутор" ?
механизм исполнения и контроля потоков

Цитата Сообщение от yotsi Посмотреть сообщение
2.Что если потоков несколько?
На здоровье
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
17.10.2014, 16:52 12
yotsi, Future это и есть результат выполнения потока, только он пуст пока поток работу не завершит.
0
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 130
17.10.2014, 17:40  [ТС] 13
Цитата Сообщение от KillAndEat Посмотреть сообщение
Future это и есть результат выполнения потока, только он пуст пока поток работу не завершит.
так а return в каком месте потока делать то?
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
17.10.2014, 18:56 14
yotsi, в конце метода call()
0
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 130
18.10.2014, 18:07  [ТС] 15
Цитата Сообщение от KillAndEat Посмотреть сообщение
в конце метода call()
Для какого случая?
Handlers,AsyncTask,Thread
???

Добавлено через 22 часа 27 минут
так как можно, например отсюдого:
Java
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 GenArr extends Thread
{
    private int arSZ;
    private int min;
    private int max;
    private int []aRR;
    Random r;
    public GenArr(int arSz,int MIN,int MAX)
    {
        this.arSZ=arSz;
        this.min=MIN;
        this.max=MAX;
        this.aRR=new int[this.arSZ];
    }
    @Override
    public void run()
    {
        this.r = new Random();
        this.r.setSeed(System.currentTimeMillis());
        for(int i=0;i<this.arSZ;i++)
        {
            this.aRR[i]=this.r.nextInt(max - min) + min;
        }
    }
}
Вывести результат работы потока?
0
YuraAAA
1581 / 1321 / 283
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
18.10.2014, 18:30 16
Java
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
class GenArr extends Thread
{
    private android.os.Handler handler;
    private int arSZ;
    private int min;
    private int max;
    private int []aRR;
    Random r;
    public GenArr(Handler handler, int arSz,int MIN,int MAX)
    {
        this.handler = handler;
        this.arSZ=arSz;
        this.min=MIN;
        this.max=MAX;
        this.aRR=new int[this.arSZ];
    }
    @Override
    public void run()
    {
        this.r = new Random();
        this.r.setSeed(System.currentTimeMillis());
        for(int i=0;i<this.arSZ;i++)
        {
            this.aRR[i]=this.r.nextInt(max - min) + min;
        }
        handler.post(new Runnable() { 
             @Override
             public void run() {
                  textView.setText("Done");
              }
    });
}
писал на коленке, проверьте.
0
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 130
18.10.2014, 21:10  [ТС] 17
YuraAAA, Я вас не понимаю.При чем здесь это:
Java
1
textView.setText("Done");
???????????

Добавлено через 17 минут
ЗЫ: что вернет Thread::getState() после завершения Thread::run() - WAITING или TERMINATED ?
0
YuraAAA
1581 / 1321 / 283
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
19.10.2014, 11:40 18
yotsi,
Цитата Сообщение от yotsi Посмотреть сообщение
Вывести результат работы потока?
Вот что это. А что Вам надо сделать с ним?

Цитата Сообщение от yotsi Посмотреть сообщение
ЗЫ: что вернет Thread::getState() после завершения Thread::run() - WAITING или TERMINATED ?
Зачем Вам это?
0
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 130
19.10.2014, 21:32  [ТС] 19
В общем все как всегда... После нескольких дней без результативных попыток найти что то в РУ, все решилось 20 минутами гугления на инглише.
Сделал через Runnable. Может кому из новичков будет полезно.Вот:
Java
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
class GenArr implements Runnable
{
    private int arSZ;
    private int min;
    private int max;
    private int []aRR;
    Random r;
    public GenArr(int arSz,int MIN,int MAX,Random R)
    {
        this.arSZ=arSz;
        this.min=MIN;
        this.max=MAX;
        this.aRR=new int[this.arSZ];
        this.r=R;
    }
    @Override
    public void run()
    {
        for(int i=0;i<this.arSZ;i++)
        {
            this.aRR[i]=Color.argb(255,r.nextInt(max - min) + min, r.nextInt(max - min) + min, 
                    r.nextInt(max - min) + min);
        }
    }
    public int[] getThResult()
    {
        return this.aRR;
    }
}
/***********************************************/
        GenArr gar=new GenArr(this.widthScr*this.heighScr,0,255,this.R);
        Thread thr=new Thread(gar);
        thr.start();
        try {
            thr.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        this.colArr=gar.getThResult();
/***********************************************/
ЗЫ: учусь дальше параллелить задачи в потоки на жабе.

Добавлено через 4 часа 26 минут
Подскажите как в жабе называеться такая штука - в классе родительского потока объявляться метод, указатель на который передается в дочерний поток, из которого вызовом этого метода данные передаются назад в родительский поток?
0
YuraAAA
1581 / 1321 / 283
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
20.10.2014, 15:55 20
Цитата Сообщение от yotsi Посмотреть сообщение
thr.join();
что повесит вызывающий поток (скорее всего UI).
0
20.10.2014, 15:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2014, 15:55

Как правильней забрать данные
Доброе утро, уважаемые форумчане!) Столкнулся с токой проблемой, что не знаю как ПРАВИЛЬНЕЙ...

Как забрать данные из необычной формы?
Вот такая форма: http://i.**********/hr1MeVQ.png Не получается забрать из неё данные. Вот что...

Как из datagridview забрать данные в текстовый файл?
Есть программа, которая работает с текстовым файлом(вложение &quot;Суточные атмосферные осадки.txt&quot;).она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru