Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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如果你想知道整个程序的执行时间,你的主线程必须等待其他线程完成计算。这是
0毫秒
,因为在创建和启动线程后,当你的线程仍在后台运行时,主线程立即进入最终打印。

在这种情况下,需要收集已有的线程,然后调用
join()
。此方法告诉调用发生的线程(在本例中为主线程)等待调用该方法的线程在继续之前终止。这样做可以确保所有线程在主线程继续计算总执行时间之前完成计算。

像这样的方法应该会奏效:

long startTime=System.nanoTime();
List threads=new ArrayList();
for(int i=0;i{
试一试{
t、 join();
}捕捉(中断异常e){
e、 printStackTrace();
}
});
long-endTime=System.nanoTime();
System.out.println(“总时间:+时间单位.纳秒.toMillis(endTime-startTime)+”毫秒”);

查看更多信息。

如果您想要整个程序的执行时间,您的主线程必须等待其他线程完成后才能计算。这是
0毫秒,因为在创建并启动线程后,主线程立即进入最终打印,而您的线程仍在运行在后台运行

在这种情况下,需要收集已有的线程,然后调用
join()
。此方法告诉调用发生的线程(在本例中为主线程)等待调用该方法的线程在继续之前终止。这样做可以确保所有线程在主线程继续计算总执行时间之前完成计算。

像这样的方法应该会奏效:

long startTime=System.nanoTime();
List threads=new ArrayList();
for(int i=0;i{
试一试{
t、 join();
}捕捉(中断异常e){
e、 printStackTrace();
}
});
long-endTime=System.nanoTime();
System.out.println(“总时间:+时间单位.纳秒.toMillis(endTime-startTime)+”毫秒”);

查看更多信息。

您指的是总执行时间组合的所有线程的执行时间,还是整个程序的执行时间?整个程序。所有线程都应同时启动,因此,只要耗时最长的线程完成,这就是结束时间。您指的是总执行时间吗n time组合的线程的所有执行时间或整个程序的执行时间?整个程序。所有线程应同时启动,因此,只要耗时最长的线程完成,即为结束时间。
$ 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
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