java 多线程 求和
我编写的一段代码,基本上已经实现多线程求和可是没办法返回每个线程求和之后得出的值我的目的毕竟是求总的和,不是每个线程的和importjava.io.*;classtest...
我编写的一段代码,基本上已经实现多线程求和
可是没办法返回每个线程求和之后得出的值
我的目的毕竟是求总的和,不是每个线程的和
import java.io.*;
class testthread extends Thread
{ int b[]=null;
public testthread(int[] a){b=a;}
public void run()
{int sum=0;
for (int i = 0; i<b.length; i++)
{
sum=sum+b[i];
}
System.out.println(sum);
}
}
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){}
}
} 展开
可是没办法返回每个线程求和之后得出的值
我的目的毕竟是求总的和,不是每个线程的和
import java.io.*;
class testthread extends Thread
{ int b[]=null;
public testthread(int[] a){b=a;}
public void run()
{int sum=0;
for (int i = 0; i<b.length; i++)
{
sum=sum+b[i];
}
System.out.println(sum);
}
}
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){}
}
} 展开
1个回答
展开全部
帮你帮到底,你凑合着看看吧
package test;
import java.io.*;
class testthread
extends Thread {
int b[] = null;
public testthread(int[] a) {
b = a;
}
public void run() {
int sum = 0;
for (int i = 0; i < b.length; i++) {
sum = sum + b[i];
}
System.out.println(sum);
thread.tnumInc(sum);
}
}
public class thread {
private static int ready = 0;
private static int tnum = 0;
private static int SUM = 0;
static synchronized void tnumInc(int p)
{
ready++;
SUM += p;
if(ready>=tnum){
System.out.println(SUM);
}
}
/**
* @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);
tnum = p;
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) {}
}
}
随便写写,没有测试过。你自己调调看吧。
大概思路就是给一个方法合并结果,并对已经完成的thread进行计数
当完成的thread的数量==总数的时候,最后结果就出来了
package test;
import java.io.*;
class testthread
extends Thread {
int b[] = null;
public testthread(int[] a) {
b = a;
}
public void run() {
int sum = 0;
for (int i = 0; i < b.length; i++) {
sum = sum + b[i];
}
System.out.println(sum);
thread.tnumInc(sum);
}
}
public class thread {
private static int ready = 0;
private static int tnum = 0;
private static int SUM = 0;
static synchronized void tnumInc(int p)
{
ready++;
SUM += p;
if(ready>=tnum){
System.out.println(SUM);
}
}
/**
* @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);
tnum = p;
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) {}
}
}
随便写写,没有测试过。你自己调调看吧。
大概思路就是给一个方法合并结果,并对已经完成的thread进行计数
当完成的thread的数量==总数的时候,最后结果就出来了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询