java - 线程测试时间

标签 java date multithreading

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

然后我在另一个类上将其称为 新线程(新的ExitThread()).start();

public class ExitThread implements Runnable {



public long getDate() {
    Date thisdate = new Date(System.currentTimeMillis());
    return thisdate.getTime();
}


public long exitDate() {
    Date exitdate = new Date(System.currentTimeMillis());
    exitdate.setHours(23);
    exitdate.setMinutes(30);
    exitdate.setSeconds(0);

    return exitdate.getTime();
}

public long sleepTime() {
    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;

    return timeToSleep;
}

@Override
public void run() {

    while (true) {
        try {
            Thread.sleep(sleepTime());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if (getDate() >= exitDate()) {
            // System exit method here
        }
    }
}

最佳答案

您可能希望在 while 循环中重新计算 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 循环中计算它,因为 sleep 可能会被打断,下一次迭代将需要更小的 timeToSleep。

关于java - 线程测试时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2735632/

相关文章:

Javascript 日期解析在 Chrome 中返回奇怪的结果

android - 在Android中检索两个不同日期之间的记录

date - 日期的核心数据 NSPredicate

python - 间歇性 Python 线程错误, "main thread is not in main loop"

java - OpenMPI:包 mpi 不存在

java - java中作业完成后返回主函数

java - 使用 JCalendar 的特定日期的背景颜色

java - java中正确的s3目录结构

multithreading - 线程总是在同一个核心上运行吗?

c++ - 解决死锁问题,在主线程中等待多个工作线程完成 (C++11)