Вызываемый интерфейс с рамкой исполнителя. Почему программа не вышла даже после возврата из метода вызова - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь понять вызываемый интерфейс с executor Framework. Это работает, но я немного запутался, почему программа никогда не завершается даже после возврата из метода вызова.

Код:

CallableExample.java

package callable1;

import java.util.concurrent.Callable;

public class CallableExample implements Callable<String> {

    @Override
    public String call() throws Exception {
        // TODO Auto-generated method stub
        String s = Thread.currentThread().getName();
        for(int i = 0 ; i < 10 ; i++)
        {
            s += ""+i;
            System.out.println(s);
            Thread.sleep(1000);
        }

        return s;
    }
}

Tester.java

package callable1;

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

public class Tester {

    public static void main(String[] args) throws Exception
    {
        ExecutorService pool = Executors.newFixedThreadPool(5);
        Future<String> ftask = pool.submit(new CallableExample());

        System.out.println("getting result");
        System.out.println("----" + ftask.get());
        System.out.println("main over");
    }
}

1 Ответ

0 голосов
/ 09 мая 2018

Пулы потоков java.util.concurrent.* спроектированы таким образом, что вам необходимо вызвать либо shutdown(), либо shutdownNow() на вашем исполнителе. В противном случае программа не остановится. Вы можете найти разницу между методами в javadocs.

...