public static void runIt(String taskDefineId){
ExecutorService executorService = Executors.newCachedThreadPool();
// 使用ExecutorService执行Callable类型的任务,并将结果保存在future变量中
TaskWithResult tr = new TaskWithResult(taskDefineId);
// 使用的submit,非excute方法
Future<String> fs = executorService.submit(tr);
// 将任务执行结果存储到List中
// executorService.shutdown();
// // 遍历任务的结果
// try {
// // 打印各个线程(任务)执行的结果
// System.out.println(fs.get());
// } catch (InterruptedException e) {
// e.printStackTrace();
// } catch (ExecutionException e) {
// // 获得子线程中抛出的异常code,注意此时使用的e.getCause(),对象的转型使用,我们在
// // 实际项目中不是简简单单的获得这个exception打印出来,而是通过这个exception获得更多的信息
//// String errorCode = ((TaskException) e.getCause())
//// .getErrorCode();
//// if(RESULT_NG_39.equals(errorCode)){
//// // log.info("XXXXXXXXXXXXXXXX");
//// }
// // e.printStackTrace();
// return;
// }
}
/**
* @Title: TaskWithResult.java
* @Package com.longshine.model.controller.experimentmanage
* @Description: TODO(用一句话描述该文件做什么)
* @author jiangkai
* @date 2018年5月30日 下午5:30:21
* @version V1.0
*/
package com.longshine.model.controller.experimentmanage;
import java.util.Random;
import java.util.concurrent.Callable;
import com.longshine.model.controller.gaia.GaiaController;
public class TaskWithResult implements Callable<String> {
private String id;
private static final String RESULT_NG_39 = "39";
public TaskWithResult(String id) {
this.id = id;
}
/**
* 任务的具体过程,一旦任务传给ExecutorService的submit方法,则该方法自动在一个线程上执行。
*
* @return
* @throws Exception
*/
public String call() throws Exception {
System.out.println("call()方法被自动调用!!! "
+ Thread.currentThread().getName());
// if (new Random().nextBoolean())
// // 此处为自定义的exception, 包含返回的error code,在实际的开发中,不同的错误会对应不同的code
// throw new Exception("Meet error in task."
// + Thread.currentThread().getName());
// 运行
GaiaController.submitTaskProcess(id);
// return "OK";
return "call()方法被自动调用,任务的结果是:" + id + " "
+ Thread.currentThread().getName();
}
}