Правильная реализация многопоточности Java Future

В моем сервлете я бью несколько URLs, чтобы проверить их статус и вернуть ответ пользователю.

Выполнение многократных запросов занимает много времени: нужны потоки и тайм-ауты. Но мне нужны мои темы, чтобы получить ответ: используя Future по этой причине.

Моя схема кода:

ExecutorService executor = Executors.newFixedThreadPool(10);
Future future;

for (Map.Entry url : urls.entrySet())
{
    try
    {
        future = executor.submit(new CallableRequestStatus(url.getValue()));
        status = (statusModel) future.get(5, TimeUnit.SECONDS);
        results.add(status);
    }
    catch (InterruptedException | ExecutionException | TimeoutException e) 
    {
        System.out.println("Error: Timeout OR "+e.getMessage());  
    }
}
executor.shutdownNow();

Все результаты из моего вызываемого класса поступают в статусном объекте, который я позже добавляю к массиву. Моя проблема здесь в том, что мой подход не позволяет мне запускать все 10 потоков одновременно. Мне нужно подождать 5 секунд для получения объекта статуса, а затем перейти к следующему URL.

Я думаю, что мой подход неверен. Я пытался искать в Интернете, но не смог найти ни одного примера с пользовательскими объектами и включенным Arraylist.

Может кто-нибудь помочь мне исправить мою ошибку. заранее спасибо

Наконец обновил мой код (спасибо Сотириосу Делиманолису и Кевину):

ExecutorService executor = Executors.newFixedThreadPool(20);
List futures = new ArrayList();

for (Map.Entry url : urls.entrySet())
{
    Future future = executor.submit(new CallableRequestStatus(url.getValue())); 
    futures.add(future);
}

ArrayList results = new ArrayList();
statusModel status;

int i=0;

for (Map.Entry url : urls.entrySet())
{           
    try 
        {
            status = (statusModel) futures.get(i).get(500, TimeUnit.MILLISECONDS);
            // do some stuff with status and

            if(status.getStatusCode()/100 == 2)
                results.add(status);
        }
    catch (InterruptedException | ExecutionException | TimeoutException e) 
        {
            System.out.println("Error: Timeout OR "+e.getMessage());  
        }   
i++;
}

executor.shutdownNow();
System.out.println("Shutdown: "+executor.isShutdown());

Надеюсь, это полезно для кого-то :)

Ответы на вопрос(1)

Ваш ответ на вопрос