增加-线程池测试案例
This commit is contained in:
64
src/test/java/ThreadPoolTest.java
Normal file
64
src/test/java/ThreadPoolTest.java
Normal file
@@ -0,0 +1,64 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
/**
|
||||
* 线程池测试案例
|
||||
*/
|
||||
public class ThreadPoolTest {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
// 开始时间
|
||||
long start = System.currentTimeMillis();
|
||||
List<String> list = new ArrayList<String>();
|
||||
for (int i = 1; i <= 3000; i++) {
|
||||
list.add(i + "");
|
||||
}
|
||||
// 每500条数据开启一条线程
|
||||
int threadSize = 500;
|
||||
// 总数据条数
|
||||
int dataSize = list.size();
|
||||
// 线程数
|
||||
int threadNum = dataSize / threadSize + 1;
|
||||
// 定义标记,过滤threadNum为整数
|
||||
boolean special = dataSize % threadSize == 0;
|
||||
// 创建一个线程池
|
||||
ExecutorService exec = Executors.newFixedThreadPool(threadNum);
|
||||
// 定义一个任务集合
|
||||
List<Callable<Integer>> tasks = new ArrayList<Callable<Integer>>();
|
||||
Callable<Integer> task = null;
|
||||
List<String> cutList = null;
|
||||
// 确定每条线程的数据
|
||||
for (int i = 0; i < threadNum; i++) {
|
||||
if (i == threadNum - 1) {
|
||||
if (special) {
|
||||
break;
|
||||
}
|
||||
cutList = list.subList(threadSize * i, dataSize);
|
||||
} else {
|
||||
cutList = list.subList(threadSize * i, threadSize * (i + 1));
|
||||
}
|
||||
final List<String> listStr = cutList;
|
||||
task = new Callable<Integer>() {
|
||||
@Override
|
||||
public Integer call() throws Exception {
|
||||
System.out.println(Thread.currentThread().getName() + "线程:" + listStr);
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
// 这里提交的任务容器列表和返回的Future列表存在顺序对应的关系
|
||||
tasks.add(task);
|
||||
}
|
||||
List<Future<Integer>> results = exec.invokeAll(tasks);
|
||||
for (Future<Integer> future : results) {
|
||||
System.out.println(future.get());
|
||||
}
|
||||
// 关闭线程池
|
||||
exec.shutdown();
|
||||
System.out.println("线程任务执行结束");
|
||||
System.err.println("执行任务消耗了 :" + (System.currentTimeMillis() - start) + "毫秒");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user