java多线程求和的问题
问题描述:定义一个多线程程序,有p个线程(p>=2),p的值从键盘输入,对于任意输入的n个整数,p个并发进程并发求n个数的和,第1线程求前面1/p部分的和,第2个线程求第...
问题描述:定义一个多线程程序,有p个线程(p>=2), p的值从键盘输入,对于任意输入的n个整数,p个并发进程并发求n个数的和,第1线程求前面1/p部分的和,第2个线程求第二个1/p部分的和……….。
比如3个线程,12个数,第一个线程求前四个数的和,第二个线程求中间四个数的和,第三个线程求后四个数的和。
我编写的一部分:
import java.io.*;
class testthread extends Thread
{ public testthread(int[] a){int[] b=a;}
public void run(int[] a)
{
for (int i = 0; i<a.length; i++)
{
System.out.println(b[i]+" ");
}
}
}
public class thread {
/**
* @param args
*/
public static void main(String args[]) {
// TODO 自动生成方法存根
try{
System.out.print("输入线程数 p(p>=2):");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String A=(String)br.readLine();
int p=Integer.parseInt(A);
System.out.print("输入求和数 n:");
BufferedReader cr=new BufferedReader(new InputStreamReader(System.in));
String B=(String)cr.readLine();
String x[] = B.split(" ") ;
int[] n = new int[x.length] ;
for (int i = 0; i<x.length; i++)
{
n[i] = new Integer(x[i]).intValue() ;
}
int c=n.length/p;
int a[][]=new int[p][c]; //定义一个多维数组
int b=0;
for(int i=0;i<p;i++) //将n[]中元素赋值给多维数组
for(int j=0;j<c;j++)
{a[i][j]=n[b];b++;}
for(int i=0;i<p;i++) //测试多维数组输出
{for(int j=0;j<c;j++)
{System.out.print(a[i][j]+" "); }
System.out.println();
}
for(int i=0;i<p;i++) //创建线程
new testthread(a[i]).start();
}catch(IOException e){}
}
}
问题在多线程实现部分,我定义了一个多维数组a[][]
现在是这么创建线程的
for(int i=0;i<p;i++)
new testthread(a[i]).start();
将a[i]传过去,a[i][1],a[i][2]过得去吗?
线程那里几乎写的就是不对,我想让每个线程执行传过来的数组的求和功能,写在run那里?总是写不对,请执教 展开
比如3个线程,12个数,第一个线程求前四个数的和,第二个线程求中间四个数的和,第三个线程求后四个数的和。
我编写的一部分:
import java.io.*;
class testthread extends Thread
{ public testthread(int[] a){int[] b=a;}
public void run(int[] a)
{
for (int i = 0; i<a.length; i++)
{
System.out.println(b[i]+" ");
}
}
}
public class thread {
/**
* @param args
*/
public static void main(String args[]) {
// TODO 自动生成方法存根
try{
System.out.print("输入线程数 p(p>=2):");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String A=(String)br.readLine();
int p=Integer.parseInt(A);
System.out.print("输入求和数 n:");
BufferedReader cr=new BufferedReader(new InputStreamReader(System.in));
String B=(String)cr.readLine();
String x[] = B.split(" ") ;
int[] n = new int[x.length] ;
for (int i = 0; i<x.length; i++)
{
n[i] = new Integer(x[i]).intValue() ;
}
int c=n.length/p;
int a[][]=new int[p][c]; //定义一个多维数组
int b=0;
for(int i=0;i<p;i++) //将n[]中元素赋值给多维数组
for(int j=0;j<c;j++)
{a[i][j]=n[b];b++;}
for(int i=0;i<p;i++) //测试多维数组输出
{for(int j=0;j<c;j++)
{System.out.print(a[i][j]+" "); }
System.out.println();
}
for(int i=0;i<p;i++) //创建线程
new testthread(a[i]).start();
}catch(IOException e){}
}
}
问题在多线程实现部分,我定义了一个多维数组a[][]
现在是这么创建线程的
for(int i=0;i<p;i++)
new testthread(a[i]).start();
将a[i]传过去,a[i][1],a[i][2]过得去吗?
线程那里几乎写的就是不对,我想让每个线程执行传过来的数组的求和功能,写在run那里?总是写不对,请执教 展开
1个回答
展开全部
将a[i]传过去,a[i][1],a[i][2]过得去
class testthread extends Thread
{
int[] b = null;
public testthread(int[] a)
{
b=a;
}
public void run()
{
for (int i = 0; i<b.length; i++)
{
System.out.println(b[i]+" ");
}
}
注意变量的作用域
另外,从Thread上继承下来的run()方法是无参的
class testthread extends Thread
{
int[] b = null;
public testthread(int[] a)
{
b=a;
}
public void run()
{
for (int i = 0; i<b.length; i++)
{
System.out.println(b[i]+" ");
}
}
注意变量的作用域
另外,从Thread上继承下来的run()方法是无参的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询