我在循环中调用一个线程来休眠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
}
答案 0 :(得分:0)
除了你的代码/实现的复杂性之外,请记住Thread.sleep()会尝试至少在> x时间内睡觉,所以它正在睡觉并不奇怪“更多”
您可以获得有关Thread.sleep()in this SO question的准确性的更多信息。
这是对您的应用似乎睡眠超过预期的情况的解释。对于无限期的睡眠,我与Mike Murphy的评论,检查你的捕获块
答案 1 :(得分:0)
重置你的柜台!在缺少的最后一个条款中,重写你的支票if(counter> = 30)
答案 2 :(得分:0)
如果你的线程被中断,计数器不会增加,线程会再睡眠1000毫秒。也许这就是你问题的原因?