У меня есть список вызываемых объектов, который я использую для создания списка будущих объектов. Я использую ExecutorService для одновременного выполнения задач Callable и сохраняю результат в виде списка объектов Future. Теперь я хочу знать, есть ли способ получить исходный вызываемый объект, который использовался для создания данного будущего объекта.
Можем ли мы получить объект Callable из объекта Future в Java?
comment
Я немного затрудняюсь понять вопрос. Итак, вы хотели бы знать объект Callable, который вы использовали для вызова службы-исполнителя? Это T в Callable‹T› или вызываемый объект в List‹Callable‹T›.?
- person vijayakumarpsg587   schedule 31.12.2018
Ответы (2)
Если вы получите свои Future
, вызвав ExecutorService.invokeAll()
, вы можете полагаться на порядок, как описано в javadoc.
* @return a list of Futures representing the tasks, in the same
* sequential order as produced by the iterator for the
* given task list, each of which has completed
person
Frank Neblung
schedule
19.06.2018
Итак, я создаю два отдельных вызываемых объекта и добавляю их в callableList. После этого я вызвал executorService.invokeall(cllableList), который возвращает список будущих объектов. Но я получаю вывод callbles случайным образом, хотя первый объект будущего должен был вернуть вывод первого вызываемого объекта. Не могли бы вы объяснить.
- person Lazycoder_007; 09.10.2019
Реализация по умолчанию не предоставляет вам эту функциональность, хотя вы можете создать свою собственную callable
import org.apache.commons.math3.util.Pair;
class MyCallable implements Callable<Pair<Callable,MyObject>>{
private MyService service;
public String name;
public MyCallable(MyService srevice,String name){
this.srevice = srevice;
this.name = name;
}
@Override
public Pair<Callable,MyObject> call() throws Exception {
return new Pair(this,service.doSomeStuff())
}
}
Теперь, когда вы вызываете вызываемый объект в будущем, у вас будет доступ к вызываемому объекту. Что-то вроде future.get().getFirst().name
будет работать.
person
Reza
schedule
17.04.2019