日期:2014-05-20  浏览次数:20636 次

跪求多线程例子,要有代码
本帖最后由 lin9118 于 2013-07-29 16:09:29 编辑
比如我想计算1~1000的累加,单线程就是用一个for循环从1加到1000,现在我想用两个线程实现1~1000的累加,思想是:用线程1累加1~500。用线程2累加501~1000。然后返回两个结果并相加得出正确结果。两个线程要同时运行,是同时运行,不是交替运行,如果是交替运行那跟单线程就没什么区别了。能否实现?如果可以实现,那么理论上多线程运行到得出结果所用的时间是不是单线程的一半?求各位大神解答,并附上代码,理论没有经过验证都是扯淡

------解决方案--------------------
两个对象两个线程,控制一个类的结果:

package com;

public class Test3 extends Thread{
XX xx;
int start;
public Test3(XX xx,int start){
this.xx=xx;
this.start=start;
}


public void run(){
int num=0;
for(int i=start;i<start+500;i++){
num+=i;
}
if(this.start==0){
xx.setNum1(num);
xx.setFlag1(true);
}else if(this.start==500){
xx.setNum2(num);
xx.setFlag2(true);
}
if(xx.isFlag1()&&xx.isFlag2()){
System.out.println(xx.getNum1()+xx.getNum2());
}
}

public static void main(String[] args) {
XX xx=new XX();
new Test3(xx, 0).start();
new Test3(xx, 500).start();
}

}

class XX{
public int num1=0;
public int num2=0;
public boolean flag1=false;
public boolean flag2=false;


public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
public boolean isFlag1() {
return flag1;
}
public void setFlag1(boolean flag1) {
this.flag1 = flag1;
}
public boolean isFlag2() {
return flag2;
}
public void setFlag2(boolean flag2) {
this.flag2 = flag2;
}

}

------解决方案--------------------
给增加操作做一个SLEEP 不然看不出效果 就如2楼说的 多线程反而慢了
package a.b.test;