该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
题目:
产生一个大于10的随机整数n,再产生n个随机数并存放于数组中,将这n个数相加的和s1,同时计算出求s1的时间t1.接着创建两个线程,线程1计算数组前一半的和s21,线程2计算后一半的和s22,最后s2=s21+s22,时间t2,t2为两个线程开始到结束的时间,比较s1,s2,t1,t2
下面是我写的(刚接触,写得很烂,请高手指点~):
import java.util.Vector;
class counter {// 计算器
static Vector V = new Vector();
int sum, s2;
public Vector random() {// 随机数组
int n = 10 + (int) (Math.random() * 10000);
for (int i = 0; i < n; i++) {
V.add((int) (Math.random() * 100));
}
return V;
}
public int count() {// 加法,时间分析
sum = 0;
for (int i = 0; i < V.size(); i++)
sum = sum + (int) V.get(i);
return sum;
}
public int count(int begin, int end) {// 加法,时间分析
sum = 0;
for (int i = begin; i < end; i++)
sum = sum + (int) V.get(i);
return sum;
}
}
class Mythread extends Thread {
int begin, end;
counter threadA;
boolean flag;
public Mythread(int i, int j, counter tc) {
begin = i;
end = j;
threadA = tc;
}
public void run() {
threadA.s2 += threadA.count(begin, end);// 将计算结果存在s2中,防止线程结束,数据丢失
flag = true;
}
}
public class ADD {
public static void main(String[] args) {
long start, end, time = 0;
counter add = new counter();
Vector MV = add.random();
start = System.currentTimeMillis();
int s1 = add.count();
end = System.currentTimeMillis();
System.out.println("s1=" + s1);
System.out.println("t1=" + time);// 时间太短,=0
Mythread t1 = new Mythread(0, (int) (MV.size() / 2), add);
Mythread t2 = new Mythread((int) (MV.size() / 2), (int) MV.size(), add);
t1.flag = false;
t2.flag = false;
start = System.currentTimeMillis();
t1.start();
t2.start();
while (!t1.flag || !t2.flag) {//等待两个线程都结束
end = System.currentTimeMillis();
time = end - start;
}
System.out.println("s2=" + add.s2);
System.out.println("t2=" + time);// t2>t1,线程中调用counter中的函数,花费时间多。
// 当数据巨大时,t2
}
}