我具有以下对象:
@Builder
@Data
public class Person
private String firstName;
private int age;
我想做的是获取一个Person
对象或一个Person.Builder
对象,在其中它分别将这两个值(firstName
和age
)设置为两个线程。之所以这样,是因为我必须进行网络调用才能获得这两个值,并且它们彼此不依赖。
现在我可以想到这样的东西:
Callable<String> nameCallable = () -> nameService.getName(personId));
Callable<Integer> ageCallable = () -> ageService.getAge(personId);
ExecutorService executor = Executors.newFixedThreadPool(4);
Future<String> nameFuture = executor.submit(nameCallable);
Future<Integer> ageFuture = executor.submit(ageCallable);
return Person.builder().name(nameFuture.get()).age(ageFuture.get()).id(personId).build();
我正在尝试找到另一种解决方案,因为使用这种方法我不知道哪个线程首先完成ExecutorCompletionService
,但是由于我的Futures具有指定的返回类型(字符串和名称),所以无法使用它。另外,如果我的所有可调用对象都具有相同的返回类型,则可以将可调用对象定义为@Bean
并将所有可调用对象自动连接到List<Callable<T>>
中,而在我的executor
中,我可以{ 1}}
如果有人对如何完成我的工作有任何想法,以及任何提示或指示,请告诉我,
谢谢