Последовательный запуск Thread процессов с использованием ExecutorService

Здравствуйте.

Я здесь впервые, поэтому не знаю еще как принято излагать вопросы. Так что заранее извиняюсь.

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

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

этих предложений

мне понравилось и написал я такой код:

JavaВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

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();
        }
    }
}

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

JavaВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

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-ов. Т.е. никакой параллелизации не получается и результат работы программы

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

Спасибо!