Java中使用线程的并行素数检查器
我有一个java程序,可以检查数字是否为素数。我试图通过使用不同的线程检查不同的数字来实现并行 我运行了这些程序并比较了它们的执行时间,但我没有看到任何改进 这是我的顺序程序primeSeq.java:Java中使用线程的并行素数检查器,java,multithreading,Java,Multithreading,我有一个java程序,可以检查数字是否为素数。我试图通过使用不同的线程检查不同的数字来实现并行 我运行了这些程序并比较了它们的执行时间,但我没有看到任何改进 这是我的顺序程序primeSeq.java: import java.io.*; 导入java.text.ParseException; 导入java.util.concurrent.TimeUnit; 导入java.lang.Object; 类素数seq{ 静态布尔isPrime(长n){ //检查基本情况: //n
import java.io.*;
导入java.text.ParseException;
导入java.util.concurrent.TimeUnit;
导入java.lang.Object;
类素数seq{
静态布尔isPrime(长n){
//检查基本情况:
//n<2,n为2或3,n可被2或3整除
如果(n<2)返回false;
如果(n==2 | | n==3)返回true;
if(n%2==0 | | n%3==0)返回false;
//检查是否可被所有数字6k+-1整除到sqrt(n)
long sqrtN=(long)Math.sqrt(n)+1;
对于(long i=6L;i,正如用户“Dawood说恢复Monica”在评论中指出的,newThread.join()
是有问题的命令
删除此选项会有所帮助,因为所有线程同时启动:
更新的primePar.java程序:
import java.io.*;
导入java.text.ParseException;
导入java.util.concurrent.TimeUnit;
导入java.lang.Object;
类MyThread扩展线程
{
布尔isPrime(长n){
//检查基本情况:
//n<2,n为2或3,n可被2或3整除
如果(n<2)返回false;
如果(n==2 | | n==3)返回true;
if(n%2==0 | | n%3==0)返回false;
//检查是否可被所有数字6k+-1整除到sqrt(n)
long sqrtN=(long)Math.sqrt(n)+1;
对于(long i=6L;i,正如用户“Dawood说恢复Monica”在评论中指出的,newThread.join()
是有问题的命令
删除此选项会有所帮助,因为所有线程同时启动:
更新的primePar.java程序:
import java.io.*;
导入java.text.ParseException;
导入java.util.concurrent.TimeUnit;
导入java.lang.Object;
类MyThread扩展线程
{
布尔isPrime(长n){
//检查基本情况:
//n<2,n为2或3,n可被2或3整除
如果(n<2)返回false;
如果(n==2 | | n==3)返回true;
if(n%2==0 | | n%3==0)返回false;
//检查是否可被所有数字6k+-1整除到sqrt(n)
long sqrtN=(long)Math.sqrt(n)+1;
对于(长i=6L;我为什么有newThread.join();
?你了解这行的功能吗?不是100%,我是线程新手。好吧newThread.join()
暂停当前线程的执行,直到newThread
完成。换句话说,您实际上一次只运行一个线程。请在不使用此行的情况下尝试。这很有帮助!谢谢!我将编辑我的问题以询问有关跟踪总执行时间的问题。不,如果您有新问题,请提出新问题。不要重复-目的:回答你已经问过的问题。你为什么有newThread.join();
?你明白这行的功能吗?不是100%,我是线程新手。好的,newThread.join()
暂停当前线程的执行,直到newThread
完成。换句话说,您实际上一次只运行一个线程。请在不使用此行的情况下尝试。这很有帮助!谢谢!我将编辑我的问题以询问有关跟踪总执行时间的问题。不,如果您有新问题,请提出新问题。不要重复-目的你已经问过的问题。嘿,使用join()
的想法没有错。:)你只是用错了方法。看看我在你的第二篇文章下面发布的解决方案。嘿,使用join()
的想法没有错。:)你只是用错了方法。看看我在你的第二篇文章下面发布的解决方案。
$ java primeSeq 1000000000000037 1000000000000091 1000000000000159 1000000000000187
1000000000000037: true Start time: 143773080 End time: 143773182 Elapsed time: 102
1000000000000091: true Start time: 143773183 End time: 143773284 Elapsed time: 101
1000000000000159: true Start time: 143773284 End time: 143773400 Elapsed time: 116
1000000000000187: true Start time: 143773400 End time: 143773510 Elapsed time: 110
Total time: 430 milliseconds
$ java primePar 1000000000000037 1000000000000091 1000000000000159 1000000000000187
1000000000000037: true Start time: 143746202 End time: 143746309 Elapsed time: 107
1000000000000091: true Start time: 143746310 End time: 143746415 Elapsed time: 105
1000000000000159: true Start time: 143746415 End time: 143746519 Elapsed time: 104
1000000000000187: true Start time: 143746520 End time: 143746619 Elapsed time: 99
Total time: 418 milliseconds
$ java primePar 1000000000000037 1000000000000091 1000000000000159 1000000000000187
Total time: 0 milliseconds
1000000000000091: true Start time: 144449191 End time: 144449354 Elapsed time: 163
1000000000000159: true Start time: 144449191 End time: 144449355 Elapsed time: 164
1000000000000187: true Start time: 144449191 End time: 144449357 Elapsed time: 166
1000000000000037: true Start time: 144449191 End time: 144449370 Elapsed time: 179