package com.test.xtt;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
public class FutureTest {
public static void main(String[] args) {
// 创建定时器
Timer timer = new Timer();
// 创建定时器任务
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("开始执行任务" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
ExceuteMessage exceute = new ExceuteMessage();
exceute.hander();
}
};
timer.schedule(timerTask, 2000, 500); // 两秒后每两秒执行一次
}
}
class TaskWithResult implements Callable<String> {
private int id;
public TaskWithResult(int id) {
this.id = id;
}
/**
* 任务的具体过程,一旦任务传给ExecutorService的submit方法,则该方法自动在一个线程上执行。
*
* @return
* @throws Exception
*/
public String call() throws Exception {
//System.out.println("call()方法被自动调用,干活!!! " + Thread.currentThread().getName());
Thread.sleep(2000 * id);
return "call()方法被自动调用,任务的结果是:" + id + " " + Thread.currentThread().getName();
}
}
class ExceuteMessage {
public void hander() {
ExecutorService executorService = Executors.newCachedThreadPool();
List<Future<String>> resultList = new ArrayList<Future<String>>();
// 创建10个任务并执行
for (int i = 0; i < 10; i++) {
// 使用ExecutorService执行Callable类型的任务,并将结果保存在future变量中
Future<String> future = executorService.submit(new TaskWithResult(i));
// 将任务执行结果存储到List中
resultList.add(future);
}
executorService.shutdown();
// 遍历任务的结果
for (Future<String> fs : resultList) {
try {
System.out.println(fs.get()); // 打印各个线程(任务)执行的结果
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
executorService.shutdownNow();
e.printStackTrace();
}
}
System.out.println("本次任务执行完毕" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
}
}
class TaskException extends Exception {
public TaskException(String message) {
super(message);
}
}
定时处理异步任务等待结果
最新推荐文章于 2024-10-17 09:49:32 发布