关于用多线程时任务分配与结果收集的问题的设计讨论
?
假定任务是这样的: 对于给定字符串,如“threadTest”, 给它再续上个“@”, 最后返回结果。 这些单条任务间没有任何的依赖关系。
?
假定这样的字符串很多, 如1000个, 而可以创建的线程数不能多于35个。
?
于是, 就有了线程创建后, 分配任务的问题, 怎么能在代码上优雅地把给定任务组,分配到线程池中, 然后再去收集这些线程处理后的结果?
?
想用java.util.concurrency中的Future, 可这个好像不能支持批量结果的收集吧??
?
于是, 用线程很原始地写了个粗暴分配任务与收集结果的代码, 这个很丑陋的。 大家说怎么改进,设计?
?
?
========下面是我粗陋实现的代码===========
?
??
Executor e = Executors.newFixedThreadPool(threadNum);CompletionService<RequestAndResult> ecs = new ExecutorCompletionService<RequestAndResult>(e);for (String d : datas ) {//对于每一个数据都要创建一个CallableWorker, //很不花算。再怎么改进?能不能创建一个Callable?ecs.submit(new CallableWorker(d));}List<RequestAndResult> results = new ArrayList<RequestAndResult>();for(int i =0; i<datas.length; i++) {RequestAndResult r = ecs.take().get();results.add(r);}