@Autowired
private WorkerService ws;
//创建一个有返回值的线程池
private final static ExecutorService threadPool
= Executors.newCachedThreadPool();
private final static Logger logger = LoggerFactory.getLogger(CalWorker.class);
public <I,O> O submitWork(BaseWork<I,O> work){
try {
work.setWs(ws);
return threadPool.submit(work).get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
logger.error(e.getMessage());
return null;
}
}
public <I,O> List<O> submitWorkList(List<?extends BaseWork<I,O>> workList){
List<Future<O>> fs = new ArrayList<>();
List<O> result = new ArrayList<>();
if(workList==null) return null;
for(BaseWork<I,O> w:workList){
w.setWs(ws);
fs.add(threadPool.submit(w));
}
try {
for(Future<O> f:fs)
result.add(f.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
result.clear();
logger.error(e.getMessage());
}
return result;
}
我想请教一下大神们,work.setWs(ws);将ws设置给work之后。把work交给了线程去处理,线程是根据什么处理了。我看只有BaseWork<I,O> implements Callable<O> 继承了Callable 但是这个类里边只是两个属性,我看不懂,希望会的朋友帮我指点一下。这个程序我已经看了好多天都找不到答案。定谢。