通过使用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码范围内. 输出描述: 输出范围在( ...
随机推荐
- Android开发之使用活动显示对话框
利用活动显示对话框,需要重写Activity中的onCreateDialog()方法,以此来显示一个对话框窗口. 效果如下: 实现代码如下: package com.example.dialog; i ...
- windows向ubuntu过渡之常用编程软件安装
不出意外的上篇文章又被踢出首页了,心情甚是悲桑..希望更多人能看到 1.安装codeblocks 直接在软件中心搜索codeblocks就可以 2.安装jdk并配置环境变量 http://www.li ...
- C#将DataTable导出Execl、Word、Xml
/// <summary> /// 将DT转换为Execl的方法 /// </summary> /// <param name=" ...
- html响应式布局,css响应式布局,响应式布局入门
html响应式布局,css响应式布局,响应式布局入门 >>>>>>>>>>>>>>>>>>& ...
- Razor的理解
[原创]Razor非常智能非常实用,不了解的人可能会觉得有没有都无所谓,其实不然,起初对Razor不是太了解,现在想想Razor就是来标示出C#语法的,但是HTML和C#混合输出时到底@这个小老鼠到底 ...
- .NET下的加密解密大全(2):对称加密
本博文列出了.NET下常用的对称加密算法,并将它们制作成小DEMO,希望能对大家有所帮助. 公共代码[csharp]static byte[] CreateKey(int num) { byt ...
- mysql 修改root密码多种方法
方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpa ...
- ios开发中MVC模式的理解
MVC是80年代出现的一种软件设计模式,是模型(model),视图(view)和控制(Controller)的缩写. 其中Model的主要功能包括业务逻辑的处理以及数据的访问,这是应用程序的主体部分. ...
- tomcat上servlet程序的配置与处理servlet请求过程
手动配置: tomcat服务器下web项目的基本目录结构 |-tomcat根目录 |-webapps |-WebRoot : web应用的根目录 |-静态资源(html+css+js+image+ve ...
- python 计算apache进程占用的内存大小以及占物理内存的比例
目的:计算所有apache进程占用的内存大小以及占物理内存的比例: 思路:利用系统中/proc/meminfo的现有数据进行统计 1.pidof列出服务对应进程的PID [root@yanglih ...