用JAVA语言编写一段程序,计算一个大的整数数组所有元素的总和,要求在双核系统中解决并利用到两个核。
用JAVA语言编写一段程序,计算一个大的整数数组所有元素的总和,要求在双核系统中解决并利用到两个核。因为题目是英文的,所以我不知道用中文怎么说,这里给出英文题目:Apro...
用JAVA语言编写一段程序,计算一个大的整数数组所有元素的总和,要求在双核系统中解决并利用到两个核。
因为题目是英文的,所以我不知道用中文怎么说,这里给出英文题目:
A programme is required to compute the sum of the elements in a large integer array.This programme will be executed on a dual-core machine.Write a solution that employs both cores to solve this problem. 展开
因为题目是英文的,所以我不知道用中文怎么说,这里给出英文题目:
A programme is required to compute the sum of the elements in a large integer array.This programme will be executed on a dual-core machine.Write a solution that employs both cores to solve this problem. 展开
4个回答
展开全部
按照你的意思
我说下基本的思路
可以使用Java的多线程
同时进行计算这样就利用到双核了,两个线程
主线程从数组的0---n/2进行计算
另一个线程从n/2---(n-1)进行计算
定义两个全局变量sum=0
sum1,主线程运行完将计算的总值赋值给sum
,然后将主线程挂起,支线程计算后半部的总和赋值给sum1,用while(sum>0)
这样才知道主线程已经计算完进入睡眠
这时唤醒主线程
让主线程计算sum与sum1的总和。
变量最好定义为无符号的长整型这样可以更好的避免数据溢出。希望对你有所帮助。
我说下基本的思路
可以使用Java的多线程
同时进行计算这样就利用到双核了,两个线程
主线程从数组的0---n/2进行计算
另一个线程从n/2---(n-1)进行计算
定义两个全局变量sum=0
sum1,主线程运行完将计算的总值赋值给sum
,然后将主线程挂起,支线程计算后半部的总和赋值给sum1,用while(sum>0)
这样才知道主线程已经计算完进入睡眠
这时唤醒主线程
让主线程计算sum与sum1的总和。
变量最好定义为无符号的长整型这样可以更好的避免数据溢出。希望对你有所帮助。
展开全部
既然要用到2个核那么自然要用到多线程
2个线程的话比1个线程速度要快大概1倍
可以先把那个大的整数数组 拆分成2个或多个运算 最后再合并.
那样比楼上的运算要快一些 但是写的复杂多了!
先写一个线程类专门运算加法
public class AddThread extends Thread {
private int []array;
public AddThread(int [] array){
this.array=array;
}
private int total=0;
public int getNum(){
start();
return total;
}
public void run() {
for(int i=0;i<array.length;i++)
{
total+=array[i];
}
}
}
这里是主类
public class add {
public static void main(String[] args) {
//这是你的数组
int[] array=new int[20000];
int array1[]=new int[array.length/2];
//这里要分成一半 你自己去分
int array2[]=new int[array.length/2];
AddThread aT1=new AddThread(array1);
AddThread aT2=new AddThread(array2);
int total=aT1.getNum()+aT2.getNum();
System.out.println(total);
}
}
2个线程的话比1个线程速度要快大概1倍
可以先把那个大的整数数组 拆分成2个或多个运算 最后再合并.
那样比楼上的运算要快一些 但是写的复杂多了!
先写一个线程类专门运算加法
public class AddThread extends Thread {
private int []array;
public AddThread(int [] array){
this.array=array;
}
private int total=0;
public int getNum(){
start();
return total;
}
public void run() {
for(int i=0;i<array.length;i++)
{
total+=array[i];
}
}
}
这里是主类
public class add {
public static void main(String[] args) {
//这是你的数组
int[] array=new int[20000];
int array1[]=new int[array.length/2];
//这里要分成一半 你自己去分
int array2[]=new int[array.length/2];
AddThread aT1=new AddThread(array1);
AddThread aT2=new AddThread(array2);
int total=aT1.getNum()+aT2.getNum();
System.out.println(total);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int total=0;
for(i=0;i<array[].length;i++)
{
total=array[i]+x;
}
System.out.print("数组array[]内所有整数和为"+total);
for(i=0;i<array[].length;i++)
{
total=array[i]+x;
}
System.out.print("数组array[]内所有整数和为"+total);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询