/**
* @author Zhi
* @Description:
* 2014-3-29 上午10:44:22
*
*/
package time;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
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 java.util.concurrent.TimeUnit;
/**
* @author Zhi
* @Description: TODO(描述) 2014-3-29 上午10:44:22
*/
public class Test {
/**
* @Description
* @Para
* @return
*/
public static void main(String[] args) throws InterruptedException,
ExecutionException {
System.out.println("----程序开始运行----");
Date date1 = new Date();
int taskSize = 5;
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
// 创建多个有返回值的任务
List<Future<List<String>>> list = new ArrayList<Future<List<String>>>();
for (int i = 0; i < taskSize; i++) {
Callable<List<String>> c = new MyCallable(i);
// 执行任务并获取Future对象
Future<List<String>> f = pool.submit(c);
list.add(f);
}
// 关闭线程池
pool.shutdown();
TimeUnit.MILLISECONDS.sleep(300);
Date date2 = new Date();
System.out.println("----程序结束运行----,程序运行时间【"
+ (date2.getTime() - date1.getTime()) + "毫秒】");
// 获取所有并发任务的运行结果
for (Future<List<String>> f : list) {
System.out.println(f.isDone());
// 从Future对象上获取任务的返回值,并输出到控制台
List<String> subList = f.get();
for (String s : subList) {
// System.out.println(s);
}
}
}
}
/**
* @author Zhi
* @Description:
* 2014-3-29 上午10:42:19
*
*/
package time;
/**
* @author Zhi
* @Description: TODO(描述)
* 2014-3-29 上午10:42:19
*/
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
/**
*
* 线程类
*
* @author kong
*
*
*/
public class MyCallable implements Callable<List<String>> {
private int taskNum;
/**
*
* 线程类构造函数,传入线程序号
*
* @param taskNum
*/
public MyCallable(int taskNum) {
this.taskNum = taskNum;
}
/**
*
* 重写接口的方法,子线程调用 <br/>
*
* 此方法是生成0-99的数字,(百位表示子线程序号)用list返回
*/
public List<String> call() throws Exception {
Date dateTmp1 = new Date();
List<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
//String num = String.valueOf(taskNum * 100 + i);
TimeUnit.MILLISECONDS.sleep(50);
System.out.println("线程:"+taskNum+"--------");
String num = String.valueOf(taskNum +"xxx");
list.add(num);
}
Date dateTmp2 = new Date();
long time = dateTmp2.getTime() - dateTmp1.getTime();
System.out.println("线程" + taskNum + "任务时间【" + time + "毫秒】");
return list;
}
}