通过使用CyclicBarrier来计算Matrix中最大的值
import java.util.Random;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* Created by ltao on 2015/1/14.
* 通过使用CyclicBarrier来计算Matrix中最大的值
*/ class FindMax {
public static void findMax(int rowStart, int rowEnd, int[] maxs, int[][] matrix, int length) {
for (int i = rowStart; i < rowEnd; i++) {
int[] tmp = matrix[rowStart];
int max = -1;
for (int j = 0; j < length; j++) {
if (max < tmp[j]) {
max = tmp[j];
}
}
maxs[i] = max;
}
}
} class SubMatrix implements Runnable {
private int rowStart;
private int rowEnd;
int[] maxs;
int[][] matrix;
int length; private CyclicBarrier cyclicBarrier; public SubMatrix(int rowStart, int rowEnd, int[] maxs, int[][] matrix, int length, CyclicBarrier cyclicBarrier) {
this.rowStart = rowStart;
this.rowEnd = rowEnd;
this.maxs = maxs;
this.matrix = matrix;
this.length = length;
this.cyclicBarrier = cyclicBarrier;
} public int getRowStart() {
return rowStart;
} public void setRowStart(int rowStart) {
this.rowStart = rowStart;
} public int getRowEnd() {
return rowEnd;
} public void setRowEnd(int rowEnd) {
this.rowEnd = rowEnd;
} public int[] getMaxs() {
return maxs;
} public void setMaxs(int[] maxs) {
this.maxs = maxs;
} public int[][] getMatrix() {
return matrix;
} public void setMatrix(int[][] matrix) {
this.matrix = matrix;
} public int getLength() {
return length;
} public void setLength(int length) {
this.length = length;
} @Override
public void run() {
try {
FindMax.findMax(rowStart, rowEnd, maxs, matrix, length);
this.cyclicBarrier.await();
} catch (Exception e) {
e.printStackTrace();
} } } public class MatrixCounter { public static void main(String[] args) { final int row = 100000;
int length = 2000;
final int[][] matrix = new int[row][length];
Random random = new Random();
for (int i = 0; i < row; i++) {
for (int j = 0; j < length; j++) {
matrix[i][j] = random.nextInt(3000);
}
} final int[] maxs = new int[row];
int coreSize = Runtime.getRuntime().availableProcessors();
int threadNum = coreSize; if (row < coreSize) {
threadNum = row;
} CyclicBarrier cyclicBarrier = new CyclicBarrier(threadNum, new Runnable() {
@Override
public void run() {
int max = -1;
for (int i = 0; i < row; i++) {
if (maxs[i] > max) {
max = maxs[i];
}
}
System.out.println("max:" + max);
}
});
System.out.println("线程数目:"+threadNum);
ExecutorService executor = Executors.newFixedThreadPool(threadNum);
for (int i = 0; i < threadNum; i++) {
int rowSart = i * (row / threadNum);
int rowEnd = 0;
if (i != threadNum - 1) {
rowEnd = (i + 1) * (row / threadNum) - 1;
} else {
rowEnd = row - 1;
}
executor.execute(new SubMatrix(rowSart, rowEnd, maxs, matrix, length, cyclicBarrier));
} } }
通过使用CyclicBarrier来计算Matrix中最大的值的更多相关文章
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 计算DNA中每种核苷酸的数目
问题描述:计算DNA中每种核苷酸的数目 输入文件内容: 代码: 输出结果:
- iOS7中计算UILabel中字符串的高度
iOS7中计算UILabel中字符串的高度 iOS7中出现了新的方法计算UILabel中根据给定的Font以及str计算UILabel的frameSize的方法.本人提供category如下: UIL ...
- OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数
1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如 ...
- (转)分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值
如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值:比如 输入 单价,数量,计算金额. 参考: 1. 输入 单价,数量,计算金额 ...
- 【c++】计算句子中单词的平均长度
Description 编程输入一行文本,计算这行文本的单词平均长度.假设每个单词用至少一个空格或者标点(英文逗号.句号)隔开.使用C++ string类型. Input 输入一行文本,不包含数字 O ...
- python之Counter类:计算序列中出现次数最多的元素
Counter类:计算序列中出现次数最多的元素 from collections import Counter c = Counter('abcdefaddffccef') print('完整的Cou ...
- 编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127).不在范围内的不作统计. 输入描述: 输入N个字符,字符在ACSII码范围内. 输出描述: 输出范围在( ...
随机推荐
- PureMVC(JS版)源码解析(七):Mediator类
之前的博文中,我们分析了SimpleCommand类和MacroCommand类,这两个类用作"业务逻辑(business logic)"处理,今天,我们讲一些和UI界面相关联的M ...
- WPF组件开发
在做组件之前,为了适应框架,我们需要有一个基类,并将这个基类打包成一个模板,让大部分组件去使用这个模板. 组件的基类就不多讲了,上篇文章中已经说过了.这是地址: http://www.cnblogs. ...
- Linux学习笔记总结--配置iptables防火墙
将原有的iptables 文件保存一份 cp -p /etc/sysconfig/iptables /etc/sysconfig/iptables.bak 清空现有的规则 iptables -F ip ...
- 一个基于MVVM的TableView组件化实现方案
AITableView https://github.com/chentoo/AITableView cocoapods: pod ‘AITableView’ 做什么用? 这是一个简化UITableV ...
- oracle合并查询
1). Union 该操作符用于取得两个结果集的并集.当使用该操作符时,会自动去掉结果集中重复行. 2).union all 该操作符与union相似,但是它不会取消重复行,而且不会排序. 3). I ...
- php 白屏
访问php白屏(base on lnmp) vim nginx/conf/fastcgi_param fastcgi_param REDIRECT_STATUS 200; fastcgi_param ...
- Task类(任务)
任务表示应完成的某个单元的工作.这个单元的工作可以在单独的线程中运行,也可以以同步方式启动一个任务,这需要等待主调用线程.使用任务不仅可以获得一个抽象层,还可以对底层线程进行很多控制. 1.启动任务 ...
- C#实现动态网站伪静态,使seo更友好
本教程将使用Visual Studio 2013手把手教你实现webform动态页面的伪静态.本教程配套的C#源码工程可通过我的github下载.地址:https://github.com/shell ...
- MVC创建通用DropdownList
起因 MVC项目中有数据字典表,定义了多个类型,需要给每个类型做下拉菜单. 不可能每个类型,都敲一个代码,需要做成通用 思路 利用MVC的部件方式,分别定义Controller,View和Model: ...
- javascript - 清空一个 array
我觉得javascript不容易, 许多人觉得js容易, 因为他们觉得很容易写出常用的需求, 但是当我们实际做项目的时候, 对于javascript的要求是很高的, 特别是在性能需求方面. 我写这句话 ...