我想执行3个java方法,并且它们都返回不同类型的数据(比如Class类型)。有没有办法可以使用ExecutorService
并行运行这3种方法?通过这种方式,call()
方法需要返回特定内容,这会破坏我使用它的想法。
如果有办法实现这一点,请告诉我。
答案 0 :(得分:0)
Callables
方法通常会返回特定的内容,这就是它有用的原因。您可以创建3种不同类型的Callable<A> c1 = () -> { return getA(); };
Callable<B> c2 = () -> { return getB(); };
Callable<C> c3 = () -> { return getC(); };
Future<A> f1 = executor.submit(c1);
Future<B> f2 = executor.submit(c2);
Future<C> f3 = executor.submit(c3);
,并且没有问题。
// returns the chats for that profile
Chat.allChatsByUser(uid).$loaded()
.then(function(data) {
for (var i = 0; i < data.length; i++) {
// self calling function for async callback handling
// this ensures that the async call is run for every iteration in the loop
(function(i) {
var item = data[i];
// function to arrange users and chats fom newest to oldest
// for each matched user. item.$id = uid
Auth.getProfile(item.$id).$loaded()
.then(function(profile) {
// first function handles success
if (typeof profile === 'object') {
if(chat.keyOrder == 'true') {
// get last chat from firebase
// WANT THIS COMPLETE BEFORE CONTINUING
ref.child('chatting').child('messages').child(chat.chatId).on("value", function(data) {
profile.lastChat = data.child('lastMsg').val();
});
// pushes chatting users profile into the array
chat.messages.push(profile);
} else {
// invalid response
return $q.reject(profile);
}
}, function(profile) {
// promise rejected
console.log('error', error);});
// i argument as closure
})(i);
}
答案 1 :(得分:0)
执行程序接受可调用任务,这是用于返回任意类型的通用功能接口。
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.submit(() -> "Hello");
executorService.submit(() -> new BigDecimal("1.1"));
executorService.submit(() -> new ArrayList());
submit()返回一个Future,它是计算结果的通用持有者,它将具有与Callable返回的数据相同的泛型类型。
Future<String> future = executorService.submit(() -> "Hello");
要访问结果,只需调用get():
String result = future.get();