package Mypackage;
//主类
public class TenThread extends Thread{
 public static void main(String args[]){
  final GetResult g=new GetResult();
  T1Thread T1=new T1Thread(g);
  T2Thread T2=new T2Thread(g);
  T1.setPriority(1);
  T2.setPriority(2);
  T1.start();
  T2.start();
  g.put();
 }
}//获取结果类,获取各个线程的结果,利用中间量temp传给p[]数组,并累加出结果
class GetResult{
 int sum;                           //计算最终结果变量
 int temp;                          //中间变量
 int p[]=new int[10];               //接收结果的数组//获取各个线程结果并传递给temp
 synchronized int Get(int k){
  return temp=k;
 }//把temp的值传给p[],并求出数组各个元素之和
synchronized void put(){
 for(int i=0;i<2;i++){
  p[i]=temp;
  sum=sum+p[i];
   }
 System.out.println(sum);//输出结果
    }
}//线程1,计算出1-100的值,并把结果传出去(利用GetResult类的Get()方法)
class T1Thread extends Thread implements Runnable{
 int sum=0;
 GetResult q;
 T1Thread(GetResult q){
  this.q=q;
  new Thread(this,"T1Thread").start();
 }
 
 public void run(){
  for(int i=1;i<=100;i++)
   sum=sum+i;
  q.Get(sum);
 }
}//同类T1Thread
class T2Thread extends Thread implements Runnable{
 int sum=0;
 GetResult q;
 T2Thread(GetResult q){
  this.q=q;
  new Thread(this,"T2Thread").start();
 }
 public void run(){
  for(int i=101;i<=200;i++)
   sum=sum+i;
  q.Get(sum);
 }
}

解决方案 »

  1.   

    楼主,我把你的程序修改了下,更具有扩展性,要注意多利用面向对象的思想,共同学习,我也是初学者。
    代码如下://主类 
    public class TenThread extends Thread {
    public static void main(String args[]) {
    GetResult g = new GetResult();
    T1Thread T1 = new T1Thread(g,1,100);
    T1Thread T2 = new T1Thread(g,101,200);
    System.out.println("结果为:"+g.sum);
    T1.setPriority(5);
    T2.setPriority(1);
    T1.start();
    T2.start();
    //为了结果的正确性,让主线程睡眠1秒钟
    try{
    Thread.sleep(1000);
    }catch(InterruptedException e){
    e.getStackTrace();
    }
    //输出最后结果
    System.out.println("结果为:"+g.sum);
    }
    }// 计算结果的类
    class GetResult {
    int sum=0; // 计算最终结果变量
        //计算求和
    synchronized void sum(int i) {
    sum=sum+i;
    System.out.println(sum);// 输出结果
    }
    }
    //创建线程的类
    class T1Thread extends Thread  {
    GetResult q;
    //index为要计算的和的起始值,end为要计算的和的结束值
    int index,end; T1Thread(GetResult q,int index,int end) {
    this.q = q;
    this.end=end;
    this.index=index;
    } public void run() {
    for (int i = index; i <= end; i++)
    q.sum(i);
    }
    }