多线程分段处理List集合
来源:互联网 发布:医疗大数据工程师招聘 编辑:程序博客网 时间:2024/06/03 23:42
场景:大数据List集合,需要对List集合中的数据同标准库中数据进行对比,生成新增,更新,取消数据
解决方案:
- List集合分段,
- 动态创建线程池
newFixedThreadPool
- 将对比操作在多线程中实现
代码如下:
public static void main(String[] args) throws Exception { // 开始时间 long start = System.currentTimeMillis(); // 模拟数据List 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)); } // System.out.println("第" + (i + 1) + "组:" + cutList.toString()); 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) + "毫秒"); }
阅读全文
0 0
- 多线程分段处理List集合
- 多线程处理一个list的集合
- java 多线程处理一个list的集合
- 多线程分组处理list
- java多线程处理导入数据拆分List集合,同步处理插入数据
- java多线程处理导入数据拆分List集合,同步处理插入数据
- java多线程处理导入数据拆分List集合,同步处理插入数据
- Java多线程处理List数据
- java多线程读取、操作List集合
- java,list分段(一)
- java,list分段(二)
- Spring 处理jsp 页面提交list集合
- Java8 利用Lambda处理List集合
- java中List集合分批处理
- mybatis where 条件为list集合处理
- 多线程分段读取数据库
- Java多线程分段下载
- java.util.concurrent 多线程处理list
- iOS runtime运行时特性解决数组越界问题。
- c++基础之数组
- Word Representation
- 解决tomcat端口号被占用的问题
- Java内部锁(synchronized)中类锁和对象锁
- 多线程分段处理List集合
- APP开发实战178-查看和删除多余的依赖库
- Android Studio 工具错误汇总
- spring data jpa 使用(二)
- 阻塞与死锁
- html5+css3实现的三十个厉害到爆了的效果
- 初识c#---类和对象
- Unity第一人称控制器
- 比较大小