Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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_Date_Multithreading - Fatal编程技术网

Java 时间线程测试

Java 时间线程测试,java,date,multithreading,Java,Date,Multithreading,我正在为我的应用程序创建一个线程,该线程将在给定的时间执行退出操作(只有小时和分钟,天/月不重要)。这是正确的方法吗?也是测试时间的正确方法吗?顺便说一下,我在测试24小时制,不是上午/下午 然后我在另一节课上,把这个叫做 新线程(newexitthread()).start() }对于可测试性,您应该注入两样东西:一个“睡眠者”和一个“时钟”。如果需要,它们可以在同一个接口中,也可以分开。生产实现将只使用Thread.sleep和System.currentTimeMillis,但这意味着您也

我正在为我的应用程序创建一个线程,该线程将在给定的时间执行退出操作(只有小时和分钟,天/月不重要)。这是正确的方法吗?也是测试时间的正确方法吗?顺便说一下,我在测试24小时制,不是上午/下午

然后我在另一节课上,把这个叫做 新线程(newexitthread()).start()


}

对于可测试性,您应该注入两样东西:一个“睡眠者”和一个“时钟”。如果需要,它们可以在同一个接口中,也可以分开。生产实现将只使用
Thread.sleep
System.currentTimeMillis
,但这意味着您也可以创建伪实现,从而使代码可测试。

您可能需要在
循环时在
内重新计算
currentTime

您可以确定与结束时间对应的毫秒数,并等待从现在到结束时间之间的毫秒数,而不是在检查结束条件之前等待10秒

如果您的结束时间介于235950和235959之间,您可能会错过它

更新

您可以通过以下方式确定等待的毫秒数:

Calendar cal = Calendar.getInstance();
long now = cal.getTime().getTime();

cal.set(Calendar.HOUR_OF_DAY,   23);
cal.set(Calendar.MINUTE,        30);
cal.set(Calendar.SECOND,        0);
cal.set(Calendar.MILLISECOND,   0);

long endMillis = cal.getTime().getTime();
long timeToSleep = endMillis - now;

注意,你还需要在while循环中计算这一点,因为睡眠可以中断,下一次迭代需要更小的时间睡眠。

也许你应该考虑使用< /p>我已经在代码中看到了一个大错误,我需要更新循环中的currenttime。更新了while循环:)但不确定如何实现最后一部分。将尝试一下。更新了代码。测试它,它的工作。谢谢你迄今为止的帮助。请让我知道您是否有改进的余地:)@DanielFH,作为改进,您可以使用
if(sleepTime()完全取消getDate和exitDate方法
Calendar cal = Calendar.getInstance();
long now = cal.getTime().getTime();

cal.set(Calendar.HOUR_OF_DAY,   23);
cal.set(Calendar.MINUTE,        30);
cal.set(Calendar.SECOND,        0);
cal.set(Calendar.MILLISECOND,   0);

long endMillis = cal.getTime().getTime();
long timeToSleep = endMillis - now;