import java.math.*;
public class bb extends Thread{
public long start;
public long end;
public long num=0;
public bb(long start,long end)
{
super();
this.start=start;
this.end=end;
}
//判断是否为素数
long isPrime(long lyy_num)
{
long lyy_flag=1;
long lyy_s=(int)Math.sqrt(lyy_num);
for(long j=2;j<=lyy_s;j++)
{
if(lyy_num%j==0)
{
lyy_flag=0;
break;
}
}
return lyy_flag;
}
//串行算法
public long num()
{
for(long i=start;i<=end;i+=2)
num+=isPrime(i);
return num+1;
}
//实现run()
public void run(){
for(long i=start;i<=end;i+=4)
{
num=num+isPrime(i);
}
}
//得到线程的最终结果
public long getNum(){
return num;
}
}
public class aa {
public static void main(String[] args) throws Exception{
bb t1=new bb(1,1000000); //判断1、5、9、13...
bb t2=new bb(3,1000000); //判断3、7、11、15...
long startTime=System.currentTimeMillis();
t1.start();
t2.start();
t1.join();
t2.join();
long endTime=System.currentTimeMillis();
System.out.println("并行结果="+(t1.getNum()+t2.getNum()));
System.out.println("并行时间="+(endTime-startTime));
startTime=System.currentTimeMillis();
bb serial=new bb(3,1000000);
long num=serial.num(); //判断3开始之后的数,最后加上2这一个素数
endTime=System.currentTimeMillis();
System.out.println("串行结果="+num);
System.out.println("串行时间="+(endTime-startTime));
}
}
运行结果:
计算:
实验加速比为:858/437=1.963
总结:
将线程分为奇数和偶数时,由于偶数判断是否素数时,很快就得出结果。因此,线程之间存在负载均衡,导致实验加速比很不理想。