From 760a8b15880737076665224e69674b9668ec0d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A3=E5=9C=A3=E5=8D=8E?= <752718920@qq.com> Date: Thu, 2 Apr 2020 00:09:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0-=E7=BA=BF=E7=A8=8B=E6=B1=A0?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=A1=88=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ThreadPoolTest.java | 64 +++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/test/java/ThreadPoolTest.java diff --git a/src/test/java/ThreadPoolTest.java b/src/test/java/ThreadPoolTest.java new file mode 100644 index 00000000..bee31f89 --- /dev/null +++ b/src/test/java/ThreadPoolTest.java @@ -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 list = new ArrayList(); + 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> tasks = new ArrayList>(); + Callable task = null; + List 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 listStr = cutList; + task = new Callable() { + @Override + public Integer call() throws Exception { + System.out.println(Thread.currentThread().getName() + "线程:" + listStr); + return 1; + } + }; + // 这里提交的任务容器列表和返回的Future列表存在顺序对应的关系 + tasks.add(task); + } + List> results = exec.invokeAll(tasks); + for (Future future : results) { + System.out.println(future.get()); + } + // 关闭线程池 + exec.shutdown(); + System.out.println("线程任务执行结束"); + System.err.println("执行任务消耗了 :" + (System.currentTimeMillis() - start) + "毫秒"); + } +}