java可以支持多线程,线程间的通信无疑是很必要的,我们需要得到一个线程运行的结果。
但问题在于,Thread的run()方法是没有任何返回值的,那这可怎么办?
有的人说,那简单!在线程类中设一个get方法,在这个线程跑起来后,再调用不就行了!
比如这个代码:这里,我们实现的功能是:线程计算100到1000000内的素数的加和(用最笨的方法),计算完后,把结果返回给主程序。
package lunxun;
class lunxunThread extends Thread{
private int result;
public int getresult(){
return result;
}
public lunxunThread()
{
}
@Override
public void run()
{
int x=0;
for(int y=100;y<1000000;y++)
{
if(issushu(y)==false)
{
x=x+y;
}
}
this.result = x;
}
public boolean issushu(int i)
{
for(int x=2;x<Math.sqrt(i);x++)
{
if(i%x==0)
{
return false;
}
}
return true;
}
}
public class lunxun {
public static void main(String[] args) { //主函数
lunxunThread x=new lunxunThread();
x.start();
System.out.println(x.getresult());
}
}
程序很简单,是不是天衣无缝?输出的结果却是:0!
原因也很简单,因为x这个线程对象的run()方法还没跑完呢,完了以后result才会被设置。而在run()没跑完之前,result结果是,0!
这种情况下,如果run()很快,也许会输出正确的结果!