Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
#1

Ожидание завершения пула потоков - Программирование Android

10.10.2013, 16:22. Просмотров 1030. Ответов 1
Метки нет (Все метки)

Нужно чтоб результат этого кода возвращался по завершению выполнения всех потоков в пуле

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
ExecutorService exService = Executors.newFixedThreadPool(5);
 
        for (int i = 0; i < 5; i++) {
 
            GetFullStoryInfo fullStoryInfo = new GetFullStoryInfo(storyNumber,
                    this);
            storyNumber--;
            
                exService.submit(fullStoryInfo);
            
        }
                
        return storyNumber;
пробовал при помощи этого

Java
1
2
3
4
5
6
7
exService.shutdown();
        try {
            exService.awaitTermination(10, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
не помогло.

Предполагаю что нужно использовать защелку, но не понимаю как=) Подскажите пожалуйста.

З.Ы. Гдето читал что ArrayList потокобезопасная конструкция по умолчанию, это так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2013, 16:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ожидание завершения пула потоков (Программирование Android):

Ожидание завершения AsyncTask - Программирование Android
Имеется класс &quot;расширяющий&quot; AsyncTask. Как я понимаю при создании объекта этого класса создается новый поток который выполняется...

Завершения потока - Программирование Android
Можно как-нить запустить новый поток, только после того как завершится первый???

Ожидание завершения потоков - Delphi
Подскажите пж. как дождатся окончание выполнения потоков в unit-2 и потом продолжить в unit-3 чет не получается с условием так как в 22...

Ожидание завершения работы потоков - Delphi
допустим есть программа, которая многопоточно отправляет get запросы через idhttp сначала на первый адрес из списка, затем на второй, на...

Ожидание завершения потоков, ExecutorService - Java SE
Правила так правила. import java.util.Arrays; import java.util.Random; import java.util.concurrent.ExecutorService; import...

.NET 4.x Ожидание завершения всех потоков - C#
Здравствуйте! Помогите, пожалуйста! В отдельных задачах (потоках далее) выполняются какие-то массивные вычисления. В главном потоке стоит...

1
Netscape
374 / 361 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
10.10.2013, 16:58 #2
Вот, набросал простенький пример:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class Main {
    
    static final int THREADS_NUMBER = 5;
    
    public static void main(String[] args) {
        final CyclicBarrier barrier = new CyclicBarrier(THREADS_NUMBER, 
                new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("All threads finished");
                    }
                });
        
        ExecutorService exService = Executors.newFixedThreadPool(THREADS_NUMBER);
        
        for (int i = THREADS_NUMBER; i > 0; i--) {
            Task task = new Task(i, barrier);
            exService.submit(task);
        }
        
        exService.shutdown();
    }
    
    private static class Task implements Runnable {
        
        int i;
        CyclicBarrier barrier;
        
        public Task(int i, CyclicBarrier barrier) {
            this.i = i;
            this.barrier = barrier;
        }
        
        @Override
        public void run() {
            try {
                Thread.sleep(i * 1000);
                System.out.println("Thread #" + i + " finished");
                barrier.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }
        }
        
    }
 
}
Цитата Сообщение от KillAndEat Посмотреть сообщение
Гдето читал что ArrayList потокобезопасная конструкция по умолчанию, это так?
Нет, CopyOnWriteArrayList потокобезопасная.

Добавлено через 1 минуту
Можно еще CountDownLatch заюзать, но я барьеры больше люблю.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2013, 16:58
Привет! Вот еще темы с ответами:

Ожидание завершения потоков ядра - C Linux
Для ядра Linux 2.6.18 или новее написать модуль, который будет делать следующее: 1. Сформировать в памяти двусвязный список...

Синхронизация пула потоков - C#
Всем привет! Задаю я, наверное, такой вопрос не первый и уж явно не последний. Тема такая: using (ManualResetEvent mre = new...

Доступ к данным из пула потоков - C#
У меня в основном потоке формируется матрица такая: int matrix = new int; Потом создаю пул потоков: ThreadPool.SetMinThreads(4,...

Многопоточный чат с использованием пула потоков - C++
есть вопрос как реализовать можно чат с использованием пулов потоков.Без пула все понятно на каждого клиента создается поток и потоки висят...


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

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

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