java 多线程合并结果集_多线程计算数据,然后合并数据
假设有一个计算量非常大的任务,使用单线程处理会花费很长时间才能处理完成,这时候可以考虑使用多线程分批计算数据,然后再汇总数据输出。在这里,使用了CyclicBarrier来实现。这个类的功能就是指定特定的线程数,等到这些线程都执行完毕之后,才会执行它的await()方法后面的代码,如果在构造器里设定了一个线程类,那么会在业务线程执行完毕之后,先执行构造器里的线程,然后执行await方法后面的线程。
package test;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.Callable;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Test1 {
private static ExecutorService service = Executors.newFixedThreadPool(4);
public static void main(String[] args) {
final Map map = new HashMap(4);
CyclicBarrier cb = new CyclicBarrier(4, new Runnable(){
public void run() {
Integer count1 = map.get("1");
Integer count2 = map.get("2");
Integer count3 = map.get("3");
Integer count4 = map.get("4");
System.out.println("count= " + (count1 + count2 + count3 + count4));
}
});
new Thread(new TestThread(map, "1", cb,1000)).start();
new Thread(new TestThread(map, "2", cb,1000)).start();
new Thread(new TestThread(map, "3", cb,1000)).start();
new Thread(new TestThread(map, "4", cb,1000)).start();
//线程池实现方式
int sum = 0;
for(int i = 0; i < 4; i++) {
Future data = service.submit(new Callable(){
@Override
public Integer call() throws Exception {
int sum = 0;
for(int i = 0; i < 1000; i++) {
sum += i;
}
return sum;
}
});
try {
sum += data.get().intValue();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("count===" + sum);
}
}
class TestThread implements Runnable {
private Map map;
private String type;
private CyclicBarrier cb;
private int n;
public TestThread(Map map, String type, CyclicBarrier cb, int n) {
this.map = map;
this.type =type;
this.cb = cb;
this.n = n;
}
@Override
public void run() {
int sum = 0;
for(int i = 0; i < n; i++) {
sum += i;
}
map.put(type, sum);
try {
cb.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java 多线程合并结果集_多线程计算数据,然后合并数据相关推荐
- java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...
多线程-Java中的对象监视器是什么意思? 为什么要使用这个词? 在阅读有关Java线程的文章时,我经常注意到这样的表达:"当前线程是该对象的监视器的所有者". 我的意思是:线程有 ...
- svn合并不同树_如何利用SVN合并代码
展开全部 利用SVN合并 Subversion的版本库是一种文件服务器,但不是"一般"的文件服务器.e69da5e6ba9062616964757a686964616f313333 ...
- java 多线程合并结果集_java多线程-合并
java多线程-合并 线程合并的意义就是几个并行的线程合并为一个单线程执行,应用于一个线程必须等待另个线程执行完毕后执行 例题:现有一个主线程,T1,T2怎么让T2在T1之后执行,主线程在T2之后执行 ...
- java 扫描tcp端口号_多线程TCP端口扫描 java实现
界面部分: import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt. ...
- java线程的创建线程_多线程(Thread、线程创建、线程池)
第1章 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序, ...
- java线程 cpu占用率_多线程程序 怎样查看每个线程的cpu占用
可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的 ...
- java多线程的底层实现_多线程的底层实现机制 - 欢迎来到古怪匹诺曹的开发世界 - OSCHINA - 中文开源技术交流社区...
1.多线程的底层实现 (1)首先回答什么是线程 1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 (2)什么是多线程 1个进程中可以开启多条线程, ...
- java 线程访问控件_多线程下访问控件的方式
前言 在很多情况下,我们都会使用到多线程,在使用多线程的时候,我们很多时候又会去访问控件,这里面就会出现很多问题!!!我以一个最常见的,我们经常会用到的例子来讲讲,在提高自己水平的同时,希望能给大家带 ...
- java 线程间变量共享_多线程:(五)多个线程之间共享数据
简单的总结一下多线程共享数据的方式.其实,最重要的,是一个思想,一个面向对象的编程思想的建立. 说两点: 一.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中 ...
最新文章
- 【数学和算法】初识卡尔曼滤波器(三)
- SpringSecurity - 基础篇
- windows系统内实现端口转发
- python os.walk_Python os.walk() 简介
- Matconvnet 学习笔记
- Unity Text 插入超链接
- 笔记15(Linux监控平台)
- 图像目标检测识别,计算物体个数,针对电子元器件计算
- C语言——知识点汇总
- 初等函数导数公式 ,积分表
- adobe flash player android 4.4,adobe flash player最新版
- 实数系的基本定理_初中数学:重点公式定理集合,中学生应该看一看
- HDU 1275 两车追及或相遇问题(相遇和追及公式)
- c# sqlite 批量修改
- Art Blocks:生成艺术的自动售货机
- spooling技术和通道及实现打印机共享
- [c语言]0xC0000005访问冲突
- 三年级计算机画图工具教案,小学三年级信息技术教学设计《画图》
- mysql中group by用法解析
- PESD5V0F1BSF特性好处
热门文章
- nodejs入门_如何在NodeJS中使用套接字创建专业的Chat API解决方案[入门级]
- 算法训练营 重编码_关于如何在没有训练营的情况下学习编码的10条提示
- 学习Node.js并开始在浏览器之外执行JavaScript
- 项目使用ts辅助_启动辅助项目后的前100天该做什么
- os系统好用的学术笔记软件_可靠软件系统的设计方法:学术文章摘要
- ds--8600使用手册_我如何用57行代码复制一个价值8600万美元的项目
- 101_Power Pivot DAX 累计至今,历史累计至今
- 基于分位数回归的静态CoVaR计算 案例与代码
- Stateflow中的真值表注意事项
- 原来python中实现语音识别如此简单!