Новое для отправки метода параллельной структуры Java. Хотите узнать, был ли поток выполнен, когда я вызываю submit или когда я вызываю get? Исследуемый официальный документ Oracle, но не может найти слишком много информации. Благодарю.submit метод параллельной структуры Java
Я имею в виду ниже образца,
http://www.vogella.com/tutorials/JavaConcurrency/article.html
package de.vogella.concurrency.callables;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class CallableFutures {
private static final int NTHREDS = 10;
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(NTHREDS);
List<Future<Long>> list = new ArrayList<Future<Long>>();
for (int i = 0; i < 20000; i++) {
Callable<Long> worker = new MyCallable();
Future<Long> submit = executor.submit(worker);
list.add(submit);
}
long sum = 0;
System.out.println(list.size());
// now retrieve the result
for (Future<Long> future : list) {
try {
sum += future.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
System.out.println(sum);
executor.shutdown();
}
}
Это объясняется в javadoc: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int- –
@JBNizet, проголосуйте за ответ , и я прочитал этот документ. В явном виде не указано, выполняется ли при выполнении задачи (учитывая простой случай, имеется достаточное количество активных потоков, чем количество выполняемых задач). Моя догадка из документа заключается в том, что задача выполняется, когда я отправляю, но я не уверен, поэтому я пришел сюда, чтобы спросить. Ваш совет приветствуется. –
Если имеется поток (т. Е. Очередь пуста), то задача выполняется немедленно. В противном случае он помещается в очередь до тех пор, пока поток не будет доступен. –