请检查如下代码,如有问题,请正确指出!(java、多线程)
来源:互联网 发布:数据库设计实例 教材 编辑:程序博客网 时间:2024/03/29 23:42
package com.test.thread;import com.google.common.collect.Lists;import org.apache.commons.collections.CollectionUtils;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.util.List;import java.util.concurrent.*;public class Test { private static ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public void execute() { long startTime = System.currentTimeMillis(); System.out.println(" ------------ execute task execute ! ------------------- "+startTime); List<Integer> recordIds = Lists.newArrayList(); int threadNum = 1; String fileName = "../data.txt"; File file = new File(fileName); BufferedReader reader = null; CompletionService<String> service = new ExecutorCompletionService<String>(executor); int line = 1; try { System.out.println("以行为单位读取文件内容,一次读一整行:"); reader = new BufferedReader(new FileReader(file)); String tempString = null; // 一次读入一行,直到读入null为文件结束 while ((tempString = reader.readLine()) != null) { // 显示行号 System.out.println("line " + line + ": " + tempString); Integer recordId = Integer.valueOf(tempString.trim()); recordIds.add(recordId); if(recordIds.size()%100==0){ service.submit(new ThreadTask(recordIds,String.valueOf(threadNum))); recordIds.clear(); threadNum++; } } if(recordIds.size()>0){ service.submit(new ThreadTask(recordIds,String.valueOf(threadNum))); } for (int i = 1; i <= threadNum; i++) { try { Future<String> future = service.take(); String result = future.get(); System.out.println(" --------------- 线程执行完成结果 :------------------- "+result); } catch (Exception e) { e.printStackTrace(); } } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } long endTime = System.currentTimeMillis(); System.out.println(" ------------ execute task execute ! ------------------- "+(endTime-startTime)/1000+" 秒!"); } class ThreadTask implements Callable<String> { private List<Integer> recordIds; private String name; public ThreadTask(List<Integer> recordIds,String name) { this.recordIds = recordIds; this.name = name; } @Override public String call() throws Exception { long startTime = System.currentTimeMillis(); if (CollectionUtils.isEmpty(recordIds)) { return null; } System.out.println(name +" , recordIds.size(): " +recordIds.size()+" ------------ thread is start execute ! ---------- "+startTime); // ... 任务处理 long endTime = System.currentTimeMillis(); System.out.println(name + " ------------ thread is end execute ! ------------ "+endTime+ "---------- 共耗时: "+(endTime-startTime)/1000+" 秒! "); return name+ " success!"; } }}
阅读全文
0 0
- 请检查如下代码,如有问题,请正确指出!(java、多线程)
- 在MFC中生成数据源过程中所遇到的问题及解决(如有错误,请指出)
- 打印规则星图 空心星图 (如有漏洞请指出)
- Android(实习生)第一次面试总结,如有回答错误还请大家指出来哦~
- 关于Java的二进制输入输出流的一点总结(有错误请指出)
- drupal7中的用户添加于更新(完全个人开发所得,如有不妥之处请大虾指出)
- 近段时间遇到的 问题 纯记录 有问题请指出
- 输出ASCII中的最大值的代码,有错误地方还请指出
- 渲染流水线的工作过程——个人理解,有问题请指出
- java学习笔记,自己有时间就整理的,有错的地方请指出来
- 整理自己所学java基础内容,有错误的请大家指出,相互进步
- 面试题: 看下面的程序是否有问题 如果有问题请指出 并说明 (关于数据类型-隐性转换的小陷阱)
- 笔试题解答(个人水平有限,有错误之处请指出)
- sdl学习心的(有错误请指出)
- JAVA虚拟机(JVM)和JAVA垃圾回收机制(JAVA GARBAGE COLLECTION)---因为刚开始学习,有部分语言不太准确,请指出,谢谢!
- 贴python毕业设计代码 请大家指出存在的缺点
- 专利撰写练习1(如有问题请大神提出)
- 请指出GAC的含义
- 滴滴校招 餐馆最大收益问题
- 我的新博客地址以及文章列表
- Java中常见的WEB服务器介绍
- 关于sql模糊查询的下划线问题
- 奥威Power-BI软件之城投集团-项目延期明细
- 请检查如下代码,如有问题,请正确指出!(java、多线程)
- Centos7 安装tomcat 开机启动
- scrapy安装出错总结
- oracle时间分钟格式注意事项
- 食物链
- ABBYY Cup 3.0 E3
- JavaBean的设计原则
- BZOJ3881: [Coci2015]Divljak
- 易宝支付基于Kubernetes的私有容器云从0到1的建设之路