Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Последовательный запуск Thread процессов, с использованием ExecutorService 
V
    Опции темы
_Y_
Дата 28.7.2014, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Добрый день. Появилась у меня задача последовательно запускать Thread процессы. При этом основная программа не должна ждать выполнения чего-либо: отдала команду запустить, скажем 2 процесса и продолжает работу, а процессы уже сами должны выполняться один за другим.

Поскольку на Java в последние годы пишу спорадически, пришлось поискать в сети решение поэлегантнее. Одно из этих предложений мне понравилось и написал я такой код:

Код

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestThreads {

    public static void main(String[] args) {
        
        ExecutorService pool = Executors.newFixedThreadPool(2);

        try {
         
         System.out.println("-0-");
         pool.submit(new TestCallable("C1")).get();
            System.out.println("-1-");
         pool.submit(new TestCallable("C2")).get();
            System.out.println("-2-");            
            
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        
        System.exit(0);
    }

}


В качестве процессов вызываются объекты такого класса:

Код

import java.util.concurrent.Callable;

public class TestCallable implements Callable<Boolean> {
    
    private String str;
    
    public TestCallable(String str){
        this.str = str;
    }
    
    @Override
    public Boolean call() throws Exception {
        System.out.println(str + " START");
        Thread.sleep(2000);
        System.out.println(str + " STOP");
        return true;
    }
}


В результате все работает последовательно, но основной процесс main ждет окончания выполнения Thread-ов. Т.е. никакой параллелизации не получается и результат работы программы
Код

-0-
C1 START
C1 STOP
-1-
C2 START
C2 STOP
-2-
  • Вопрос 1: Что я не так делаю, что не параллелизирует выполнение?
  • Вопрос 2: Результат не зависит от того какое число я ставлю аргументом:  Executors.newFixedThreadPool(1) или Executors.newFixedThreadPool(2). Мне казалось, что этот аргумент должен влиять именно на ход основной программы. В чем я запутался?

Спасибо!



Это сообщение отредактировал(а) _Y_ - 28.7.2014, 15:00


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
_Y_
Дата 28.7.2014, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Разобрался (на другом форуме подсказали). Копипастил нерабочий код. Вызов методов .get() в нем лишний. Надо так:
Код

pool.submit(new TestCallable("C2"));


Это сообщение отредактировал(а) _Y_ - 28.7.2014, 15:26


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0381 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.