Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中使用线程的并行素数检查器_Java_Multithreading - Fatal编程技术网

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

我有一个java程序,可以检查数字是否为素数。我试图通过使用不同的线程检查不同的数字来实现并行

我运行了这些程序并比较了它们的执行时间,但我没有看到任何改进

这是我的顺序程序primeSeq.java:

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