睡眠线程有时睡眠时间超过所需时间



我在while循环中调用一个线程以休眠1秒。当标志为true时,循环将运行(标志为true,持续无限时间)。在循环内部,线程应该睡眠1秒,唤醒并增加计数器,检查IF条件,在FALSE条件下,它应该再次睡眠1秒,过程继续29次。在第30次迭代中,IF条件将为true,IF语句内部调用的方法将收集并存储数据。最后,在第32次迭代中,在第二个IF语句中调用的方法将把存储的数据发送到服务器,并将计数设置为0。问题是,有时睡眠线程睡眠时间超过1分钟或睡眠时间不确定。在这里找到我随附的代码。

public class NetworkThread implements Runnable {
private boolean flag;
public NetworkThread(boolean bool) {
    flag = bool;
    isrunning();
}
private boolean isrunning() {
    return flag;
}
int counter = 0;
@Override
public void run() {
    sendStartPacket();
    while (flag) {
        try {
            Thread.sleep(1000);
            counter++;
            if (counter % 30 == 0) {
                // TODO Auto-generated method store an information
            }
            if (counter % 32 == 0) {
                // TODO Auto-generated method send the information to server
            }
        } catch (Exception e) {
            e.toString();
        }
    }
}
private void sendStartPacket() {
    // TODO Auto-generated method stub
}

重置计数器!如果(counter>=30)

除了代码/实现的复杂性之外,请记住Thread.sleep()将尝试睡眠至少x次,所以它睡眠"更多"并不奇怪。

你可以在这个SO问题中获得更多关于Thread.sleep()准确性的信息。

这就是当你的应用程序睡眠时间超过预期时的解释。对于无限期睡眠,我同意Mike Murphy的评论,请检查您的捕获块

如果线程被中断,计数器不会增加,线程还会休眠1000毫秒。也许这就是问题的原因?

最新更新