62,614
社区成员
发帖
与我相关
我的任务
分享
package Algorithm.DP;
public class Prime {
int count=4;
public boolean isPrime(int i){
if(i%2==0)
return false;
if(i%3==0)
return false;
if(i%5==0)
return false;
if(i%7==0)
return false;
for(int j=8;j*j<=i;j++){
if(i%j==0)
return false;
}
count++;
return true;
}
public static void main(String [] args){
Prime prime=new Prime();
int [] array=new int[10000001];
for(int i=0;i<array.length;i++)
array[i]=i;
long startTime=System.currentTimeMillis();
for(int i=2;i<array.length;i++)
prime.isPrime(array[i]);
System.out.println("共有素数个数"+prime.count+" 计算花费时间"+(System.currentTimeMillis()-startTime));
}
}
package Algorithm.DP;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.*;
public class Concurrency implements Runnable{
static AtomicInteger count;
private final CountDownLatch latch;
private Counter counter;
public Concurrency(Counter counter,CountDownLatch latch){
this.latch=latch;
count=new AtomicInteger(4);
this.counter=counter;
}
public boolean isPrime(long temp){
if(temp%2==0)
return false;
if(temp%3==0)
return false;
if(temp%5==0)
return false;
if(temp%7==0)
return false;
for(int j=8;j*j<=temp;j++){
if(temp%j==0)
return false;
}
return true;
}
@Override
public void run() {
while(!Thread.interrupted()){
long temp=counter.nextNum();
if(temp==0)
Thread.currentThread().interrupt();
else
{
if(isPrime(temp))
{
count.incrementAndGet();
}
}
}
latch.countDown();
}
public static void main(String [] args) throws InterruptedException{
int numOfThreads=3;
long startTime=System.currentTimeMillis() ;
CountDownLatch latch=new CountDownLatch(numOfThreads);
Counter counter=new Counter();
ExecutorService exec=Executors.newCachedThreadPool();
for(int i=0;i<numOfThreads;i++)
exec.execute(new Concurrency(counter,latch));
exec.execute(new WaitingTask(latch,startTime));
}
}
class Counter{
final int TOTAL=10000000;
AtomicInteger num=new AtomicInteger(2);
public int nextNum(){
if(num.get()<=TOTAL)
return num.incrementAndGet();
return 0;
}
}
class WaitingTask implements Runnable{
private final CountDownLatch latch;
private final long startTime;
public WaitingTask(CountDownLatch latch,long startTime){
this.latch=latch;
this.startTime=startTime;
}
@Override
public void run() {
try {
latch.await();
System.out.println("共有"+Concurrency.count+"个素数"+"用时"+(System.currentTimeMillis()-startTime));
} catch (InterruptedException e) {
System.out.println("等待线程被中断");
}
}
}