【项目说明】:继承Thread类实现求10000以内素数个数的Java多线程并行程序
求10000以内素数个数,输出结果、并行、串行时间,并计算加速比。
【项目代码】:
public class And extends Thread {
private long start;
private long end;
private long sum=0;
public And(long start, long end) {
super();
this.start = start;
this.end = end;
}
public void run() {
long t;
for(long i=start;i<=end;i+=2)
{ t=0;
for(long j=2;j<=i;j++)
if(i%j!=0)
t++;
if(i!=0&&i!=1)
if(t>=i-2)
sum++;
}
}
public long sum(){
long t;
for(long i=start;i<=end;i++)
{ t=0;
for(long j=2;j<=i;j++)
if(i%j!=0)
t++;
if(i!=0&&i!=1)
if(t>=i-2)
sum++;
}
return sum;
}
public long getSum() {
return sum;
}
public static void main(String[] args) throws InterruptedException {
And thread1=new And(1, 10000);
And thread2=new And(2, 10000);
long startTime=System.currentTimeMillis();
thread1.start();
thread2.start();
thread1.join();
thread2.join();
long endTime=System.currentTimeMillis();
System.out.println("并行结果="+(thread1.getSum()+thread2.getSum()));
System.out.println("并行时间="+(endTime-startTime));
long t1=endTime-startTime;
startTime=System.currentTimeMillis();
And serial=new And(1, 10000);
long sum=serial.sum();
endTime=System.currentTimeMillis();
System.out.println("串行结果="+sum);
System.out.println("串行时间="+(endTime-startTime));
long t2=endTime-startTime;
System.out.println("加速比="+t2*1.0/t1);
}
}
【运行截图】: