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中最大的值的更多相关文章

  1. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  2. 计算DNA中每种核苷酸的数目

    问题描述:计算DNA中每种核苷酸的数目 输入文件内容: 代码: 输出结果:

  3. iOS7中计算UILabel中字符串的高度

    iOS7中计算UILabel中字符串的高度 iOS7中出现了新的方法计算UILabel中根据给定的Font以及str计算UILabel的frameSize的方法.本人提供category如下: UIL ...

  4. OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

    1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如 ...

  5. (转)分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  6. 如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值

    如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值:比如 输入 单价,数量,计算金额. 参考: 1.  输入 单价,数量,计算金额 ...

  7. 【c++】计算句子中单词的平均长度

    Description 编程输入一行文本,计算这行文本的单词平均长度.假设每个单词用至少一个空格或者标点(英文逗号.句号)隔开.使用C++ string类型. Input 输入一行文本,不包含数字 O ...

  8. python之Counter类:计算序列中出现次数最多的元素

    Counter类:计算序列中出现次数最多的元素 from collections import Counter c = Counter('abcdefaddffccef') print('完整的Cou ...

  9. 编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。

    题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127).不在范围内的不作统计. 输入描述: 输入N个字符,字符在ACSII码范围内. 输出描述: 输出范围在( ...

随机推荐

  1. PureMVC(JS版)源码解析(十一):Model类

          这篇博文讲PureMVC三个核心类——Model类.Model类的构造函数及工厂函数[即getInstance()方法]和View类.Controller类是一样的,这里就不重复讲解了,只 ...

  2. android开发之SwipeListView的使用

    实现一种类似于qq中滑动列表的功能: 向左或者向右滑动,然后执行相关操作. 这里用到的是GitHub上的开源控件SwipeListView,下载地址https://github.com/47deg/a ...

  3. Ⅳ.AngularJS的点点滴滴-- 服务

    服务(Angularjs很多方法都是服务组成的) 1.使用service方法创建的单例服务 <html> <script src="http://ajax.googleap ...

  4. Java的浮点数

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/5160771. ...

  5. not exists 跟not in 纪念一下

  6. WisDom.Net 框架设计(四) 用户安全

    WisDom.Net  ----用户安全 1.用户单机登录 正如其名这里要求其实就是显示用户只能在一台电脑上登录.防止多处登录,这里简单的说一下实现原理,我们在这里使用session +cookie ...

  7. Android 设计随便说说

    我曾经搞过应用程序的设计,当时只是读了半本宝典<重构...>,现在看来就这半本九阴真经,收益甚多啊 .再加上这现年工作上的印证,基本上可以拿出喷一下了.当然现在看来当年的项目设计真是很烂了 ...

  8. maven依赖缺少oracle驱动包

    maven添加oracle jdbc驱动的依赖问题 在maven工程里不能下载oracle的jdbc驱动jar包,需要Oracle官方授权才可以,找一个ojdbc14的10.2.0.1.0或10.2. ...

  9. 创业 CEO:如何选择投资人

    欢迎来到「创业 CEO」系列,在这个系列中,我们讨论一个创业者如何教会自己成为一位伟大的 CEO,因为历史上最伟大的创业公司,往往都是由这样的人在领导. AppWorks 成立至今,总共参与投资了 2 ...

  10. Quartz.NET开源作业调度架构

    Quartz.NET是一个开源的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不 ...