java - How to Iteratre over Future<List> Object? -
the return value of call() method list<person>. mycallable class looks this:
public class mycallable implements callable <list<person>>{ public list<person> call() throws exception { ... return list } public mycallable(list<account> accountlist) { super(); } } below code im writing in callablefuture class
executorservice executor = executors.newfixedthreadpool(nthreds); list<future<list<person>>> list = new arraylist<future<list<person>>>(); (int = 0; < 20; i++) { callable<list<person>> worker = new mycallable(accountlist); future<list<person>> submit = executor.submit(worker); for(future<list<person>> :list){ //list.add(submit); } } i don't know how iterate on list , add submit it. doing right?
couple of problems. first of all, rather attempting grab results of future after submitting each 1 (if you're serializing , defeating purpose), submit all of them, , then retrieve results:
list<future<list<person>>> list = new arraylist<future<list<person>>>(); (int = 0; < 20; i++) { callable<list<person>> worker = new mycallable(accountlist); future<list<person>> submit = executor.submit(worker); list.add(submit); // keep track of them } // next step results... next, you're having basic syntax problems. in general iterate on items in container syntax is:
list<a> list = ...; (a : list) { // things 'a' } and finally, need check docs future, show how wait computed , obtain results using future#get().
putting end next step (after submitting above) being:
// ... tasks submitted , 'list' contains futures, next step: (future<list<person>> future : list) { list<person> result = future.get(); // wait task complete // 'result' list<person> returned corresponding callable. } the idea behind submitting then getting results allow tasks execute concurrently instead of waiting each 1 complete before adding next. then, @ end, if end waiting on few, it's ok, because total wait time tasks has been reduced intended.
Comments
Post a Comment