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

时间:2016-01-07 11:59:54

标签: java android multithreading

我在循环中调用一个线程来休眠1秒钟。当标志为true时,循环将运行(标志在无限时间内为真)。 在循环内部线程应该休眠1秒,唤醒并增加计数器,检查IF条件,在FALSE条件下它应该再次休眠1秒并且过程继续29次。在第30次迭代时IF条件为真,IF语句内部调用的方法将收集并存储数据。最后在第二个IF语句内部调用的第32个迭代方法将存储的数据发送到服务器并设置count = 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

}

3 个答案:

答案 0 :(得分:0)

除了你的代码/实现的复杂性之外,请记住Thread.sleep()会尝试至少在 x时间内睡觉,所以它正在睡觉并不奇怪“更多”

您可以获得有关Thread.sleep()in this SO question的准确性的更多信息。

这是对您的应用似乎睡眠超过预期的情况的解释。对于无限期的睡眠,我与Mike Murphy的评论,检查你的捕获块

答案 1 :(得分:0)

重置你的柜台!在缺少的最后一个条款中,重写你的支票if(counter> = 30)

答案 2 :(得分:0)

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