【发布时间】:2015-05-10 09:06:01
【问题描述】:
线程在 5 秒时中断。在isPrime 函数中,如果if(num % 2 == 0) 被注释,代码将打印到85427,而如果它只打印到83761。请帮助理解多线程中的这种荒谬行为。
public void run(){
long number = 1l;
while(true){
if(isPrime(number)){
System.out.println("Number is prime number : " + number);
}
if(isInterrupted()){
System.out.println("The Prime generator has been interrupted");
return;
}
number++;
}
}
public boolean isPrime(long num){
if(num <= 2){
return true;
}
else{
if(num % 2 == 0){
return false;
}
else{
for(long i = 3; i < num ; i++ ){
if((num % i) == 0){
return false;
}
}
}
}
return true;
}
【问题讨论】:
-
好吧,从顶部开始,我想说的是,如果你删除 IF 条件,你的 CPU 必须做更少的计算,因此它会在 5 秒内计算更多的素数
-
在运行 5000ms 时,not-if 版本更快,这似乎很奇怪。我可以期望它具有较小的值,但是在某个数字之后,if 版本应该会快得多,因为偶数的处理速度会更快。我想这是一个糟糕的衡量问题,而不是性能问题。
-
您多久进行一次测试?
标签: java if-statement for-loop