增加-线程池测试案例
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