多线程用于计算1到1000000000之间的数字累加,并比较多个线程耗时多少

package cn.java.core.ch03.job.job03;

import java.util.Scanner;

public class MultiCalc {
private long startTime = 0L;
private long endTime =0L;

private long totalResult = 0L;

private Boolean[] isCompleted = null;

public static void main(String[] args) {

(new MultiCalc()).startUp();
}

private boolean isSuccessed(){
for(int i=0;i<isCompleted.length;i++){
if (!isCompleted[i])
return false;
}
return true;
}

private void startUp(){
int threadNum;
long numbers = 100L;

System.out.println("请输入要开启的线程数");
Scanner input = new Scanner(System.in);
threadNum = input.nextInt();
isCompleted = new Boolean[threadNum];

System.out.println("开始计时....");
startTime = System.currentTimeMillis();
for(int i=1;i<=threadNum;i++){
isCompleted[i-1] =false;
Thread t = new Thread(new CalcThread(i,numbers,threadNum));
t.start();
}
synchronized (MultiCalc.this) {
try {

MultiCalc.this.wait();

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

endTime = System.currentTimeMillis();

System.out.println("计算结果为:"+totalResult);
System.out.println("计时结束,总耗时为:"+(endTime-startTime)+"ms");
}

class CalcThread implements Runnable{
private long start;
private long end;
private long result;
private int threadIndex;
public CalcThread(int threadIndex,long numbers,int threadNum){
long step = numbers/threadNum;
this.threadIndex = threadIndex;
start = (threadIndex-1)*step+1;
if (threadIndex==threadNum){ //是否是最后一个线程
end = numbers;
}else{
end = threadIndex*step;
}

//System.out.println(Thread.currentThread().getName()+
//"---->"+start+"~"+end);
}
@Override
public void run() {
for(long i=start;i<=end;i++){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
result+=i;
}

//System.out.println(result);
synchronized (MultiCalc.this) {
totalResult +=result;
isCompleted[this.threadIndex-1] = true;
if (isSuccessed()){
MultiCalc.this.notify();
}
}
//System.out.println(totalResult);
}
}
}

时间: 2024-08-28 11:11:21

多线程用于计算1到1000000000之间的数字累加,并比较多个线程耗时多少的相关文章

机器学习-文本数据-文本的相关性矩阵 1.cosing_similarity(用于计算两两特征之间的相关性)

函数说明: 1. cosing_similarity(array)   输入的样本为array格式,为经过词袋模型编码以后的向量化特征,用于计算两两样本之间的相关性 当我们使用词频或者TFidf构造出词袋模型,并对每一个文章内容做词统计以后, 我们如果要判断两个文章内容的相关性,这时候我们需要对数字映射后的特征做一个余弦相似度的匹配:即a.dot(b) / sqrt(a^2 + b^2) 在sklearn中使用metrics.pairwise import cosine_similarity 代

编写一个JAVA类,用于计算两个日期之间的周数。

import java.text.SimpleDateFormat;import java.util.Date;import java.util.Scanner; public class demo3 { /**  * @param args  */ public static void main(String[] args) {  // TODO Auto-generated method stub  System.out.println("请输入第一个日期:yyyy-MM-dd")

C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:

如下: typedef struct date { int year; int month; int day; }; 提示: 1. 使用如下函数完成相应功能 int isleapyear(int y); //计算是否为闰年 int islegal(Date x); //计算日期是否合法 int calcday(Date x);//计算日期是当年的第几天,用于计算两个日期之间天数的差值 2. 用于一维数组表示一年每月含有的天数 int dayofmonth[12] = {31,28,31,30,3

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() 实现. 函数 TimeStampDiff() 是MySQL本身提供的可以计算两个时间间隔的函数,语法为: TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之

fuzzywuzzy:计算两个字符串之间的相似度

楔子 fuzzywuzzy是用来计算两个字符串之间的相似度的,它是依据Levenshtein Distance算法来进行计算的 Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.一般来说,编辑距离越小,两个串的相似度越高. fuzz from fuzzywuzzy import fuzz # 调用fuzz.ratio即可计算两

[转]浅谈协方差矩阵(牢记它的计算是不同维度之间的协方差,而不是不同样本之间。)

注意:方差就是方差:方差的平方就是方差的平方.有的时候以为方差就是方差的平方. cov11 = sum((dim1-mean(dim1)).*(dim1-mean(dim1)))/(size(MySample,1)-1) cov11 = 296.7222 >> std(dim1) ans = 17.2256 >> std(dim1).^2 ans = 296.7222 一.统计学的基本概念 统计学里最基本的概念就是样本的均值.方差.标准差.首先,我们给定一个含有n个样本的集合,下面

计算两个日期之间相差几天(Date类型与String类型互相转换)

一:计算两个日期之间相差几天 1 /** 2 * 3 */ 4 package com.hlcui.date; 5 6 import java.text.ParseException; 7 import java.text.SimpleDateFormat; 8 import java.util.Calendar; 9 import java.util.Date; 10 11 import org.junit.Test; 12 13 /** 14 * @author Administrator

js实现的计算两个时间之间的时间差

js实现的计算两个时间之间的时间差:在实际应用中,需要计算两个时间点之间的差距,一般来说都是计算当前时间和一个指定时间点之间的差距,并且有时候需要精确到天.小时.分钟和秒,下面就简单介绍一下如何实现此效果.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.

用VBA计算两个日期之间的工作日(去掉周末两天)

最近公司HR和Finance想算员工的工作天数,想让我帮忙写些VBA,自己从网上找了下代码,自己再改改,以下来自网络. 计算两个日期之间的工作日,用VBA,因量大,最好用数组做 Sub kk() Dim arr, i&, j&, m& arr = Sheet2.Range("b3:f4") For i = 1 To UBound(arr) m = 0 For j = arr(i, 1) To arr(i, 3) If Weekday(j) <> 1