我在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毫秒。也许这就是问题的原因?