java:
import java.text.DecimalFormat;
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()
{
for(long i=start*2-1;i<=end;i+=4)
if(isPrime(i))
sum++;
}
public long sum()
{
for(long i=start;i<=end;i++)
if(isPrime(i))
sum++;
return sum;
}
public boolean isPrime(long i)
{
for(int m=2;m<=Math.sqrt(i*1.0);m++)
{
if(i%m==0)
return false;
}
return true;
}
public long getSum()
{
return sum;
}
public static void main(String[] args) throws InterruptedException {
long t1,t2;
And thread1=new And(3,1000000);
And thread2=new And(2,1000000);
long startTime=System.currentTimeMillis();
thread1.start();
thread2.start();
thread1.join();
thread2.join();
long endTime=System.currentTimeMillis();
t1=endTime-startTime;
System.out.println("并行结果="+(thread1.getSum()+thread2.getSum()+1));
System.out.println("并行时间="+t1);
startTime=System.currentTimeMillis();
And serial=new And(2,1000000);
long sum=serial.sum();
endTime=System.currentTimeMillis();
t2=endTime-startTime;
System.out.println("串行结果="+sum);
System.out.print("加速比是=");
//t3=(long) Double.parseDouble(String.format("%.12f",t3));
DecimalFormat df = new DecimalFormat( "0.00000 ");
System.out.println(df.format(t2*1.0/t1));
}
}
接口:
import java.text.DecimalFormat;
class work implements Runnable{
private long start;
private long end;
private long sum=0;
public work(long start,long end)
{
super();
this.start=start;
this.end=end;
}
public void run()
{
for(long i=start*2-1;i<=end;i+=4)
if(isPrime(i))
sum++;
}
public long sum()
{
for(long i=start;i<=end;i++)
if(isPrime(i))
sum++;
return sum;
}
public boolean isPrime(long i)
{
for(int m=2;m<=Math.sqrt(i*1.0);m++)
{
if(i%m==0)
return false;
}
return true;
}
public long getSum()
{
return sum;
}
}
public class And2{
public static void main(String[] args) throws InterruptedException {
long t1,t2;
work work1=new work(3,100000);
work work2=new work(2,100000);
Thread thread1=new Thread(work1);//接口的对象作为线程的参数
Thread thread2=new Thread(work2);
long startTime=System.currentTimeMillis();
thread1.start();
thread2.start();
thread1.join();
thread2.join();
long endTime=System.currentTimeMillis();
t1=endTime-startTime;
System.out.println("并行结果="+(work1.getSum()+work2.getSum()+1));
System.out.println("并行时间="+t1);
startTime=System.currentTimeMillis();
work serial=new work(2,100000);
long sum=serial.sum();
endTime=System.currentTimeMillis();
t2=endTime-startTime;
System.out.println("串行结果="+sum);
System.out.println("串行时间="+t2);
System.out.print("加速比是=");
//t3=(long) Double.parseDouble(String.format("%.12f",t3));
DecimalFormat df = new DecimalFormat( "0.00000");
System.out.println(df.format(t2*1.0/t1));
}
}