Java多线程分段处理List集合
解决方案:
1.List集合分段
2.动态创建线程池newFixedThreadPool
3.多线程处理数据
代码如下:
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) + "毫秒");
}
相关推荐
Android 进行文件分段多线程下载的实例,用户可以指定线程数,还可以通过进度条查看下载的进度。
使用QT5实现了多线程...刚开始学习QT,网上没有找到多线程分段下载的源码,有一个博主展示了这个功能,要加入付费群才能给源码,估计给源码又得付费。自己通过查资料实现的,还有很多不完善的地方,欢迎大家提建议。
java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制
java多线程处理数据库数据,使用并发包,无框架,可批量处数据库数据,进行增删改。。等等操作。
java实现多线程下载,一个小例子,实现了分段多线程下载
主要介绍了Java多线程处理List数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java多线程处理大数据,可根据配置的线程数,任务去调度处理
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
JAVA代码实现多线程分段下载+断点续传 原理很清楚,但是其中涉及到几个关键的问题: 1.需要请求的数据如何分段。 2.分段下载的数据如何组装成完整的数据文件。 3.断点的数据如何保存,再次下载如何继续上次保存的...
纯JavaFX实现的多线程分段下载工具,不依赖任何第三方库,实现多线程分段下载以及下载完成后的资源合并,全图形化界面操作,充分利用多核CPU。
java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题
java多线程并发查询数据库,使用线程池控制分页,并发查询。
一个java 多线程操作数据库应用程序!!!
详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。
java多线程加队列上传文件_后台处理
该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!
java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例
Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...
多线程启动.java多线程启动.java多线程启动.java多线程启动.java