ExecutorService threadPool = Executors.newCachedThreadPool()

qq_36144322 2017-09-12 01:57:52
@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 但是这个类里边只是两个属性,我看不懂,希望会的朋友帮我指点一下。这个程序我已经看了好多天都找不到答案。定谢。


...全文
699 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
X元素 2017-09-12
  • 打赏
  • 举报
回复
首先楼主要明白 java中的线程,callable 是可以获取返回值的线程实现,举例:

Thread thread = new Thread(){
      //这个线程是没有返回值的,也就是你执行一段线程,
      //什么时候执行,执行结果是什么,不做特殊处理,你全都是不知道的。
     @Override
      public void run(){
         // do something you want.
      }
};
thread.start();
		
       Callable<String> callable  =  new Callable<String>() {
			@Override
			public String call() throws Exception {
                                // 可以获取到返回值 ,可以通过Future.get() 方式获取
				return "";
			}
			
	};
qq_36144322 2017-09-12
  • 打赏
  • 举报
回复
引用 1 楼 u011619071 的回复:
首先楼主要明白 java中的线程,callable 是可以获取返回值的线程实现,举例:

Thread thread = new Thread(){
      //这个线程是没有返回值的,也就是你执行一段线程,
      //什么时候执行,执行结果是什么,不做特殊处理,你全都是不知道的。
     @Override
      public void run(){
         // do something you want.
      }
};
thread.start();
		
       Callable<String> callable  =  new Callable<String>() {
			@Override
			public String call() throws Exception {
                                // 可以获取到返回值 ,可以通过Future.get() 方式获取
				return "";
			}
			
	};
x谢谢 明白了

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧