Я хочу знать, что когда программа ожидает объект Future одного потока, другие потоки продолжат свое выполнение.
Я пробовал приведенный ниже пример, похоже, когда моя программа ожидает один поток, другие потоки не продолжают свое выполнение. Пожалуйста, скажите мне, правильно ли это, или есть какие-то проблемы с моим кодом для обработки потоков.
ExecutorService executor = Executors.newFixedThreadPool(3);
for(int i=0; i<5 ;i++)
{
Worker w = new Worker();
Future<String> future = executor.submit(w);
while(!future.isDone())
{
//Wait
}
String s = future.get();
System.out.println(LocalDateTime.now()+" "+s);
}
executor.shutdown();
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
Ниже мой рабочий класс:
public class Worker implements Callable<String> {
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
Thread.sleep(3000);
return Thread.currentThread().getName();
}
}
Я получаю следующие результаты (добавлено время даты, чтобы показать, что результаты не параллельны):
2019-01-04T16:34:22.647 pool-1-thread-1
2019-01-04T16:34:25.661 pool-1-thread-2
2019-01-04T16:34:28.673 pool-1-thread-3
2019-01-04T16:34:31.685 pool-1-thread-1
2019-01-04T16:34:34.699 pool-1-thread-2