当前位置: 首页 > 知识库问答 >
问题:

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

嵇丰
2023-03-14

我正在调用while循环内的线程Hibernate1秒。当标志为true时,循环将运行(标志为true无限时间)。在循环内,线程应Hibernate1秒,唤醒并增加计数器,检查IF条件,如果为FALSE,则应再次Hibernate1秒并继续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

}

共有3个答案

相俊迈
2023-03-14

如果你的线程被中断,计数器不会增加,线程会再Hibernate1000毫秒,也许这就是你的问题所在?

徐茂材
2023-03-14

除了代码/实现的复杂性之外,请记住,Thread.sleep() 将尝试至少Hibernate x 时间,因此它Hibernate“更多”并不奇怪。

您可以获得有关线程准确性的更多信息。这个SO问题中的sleep()。

这是你的应用似乎睡眠超过预期情况的说明。对于无限期的睡眠,我与迈克墨菲的评论,检查你的捕捉块

莘昊
2023-03-14

重置计数器!在缺失的最后一句中重写您的check if(counter

 类似资料:
  • 我正在尝试使用Java开发2D游戏。到目前为止,我已经设法将游戏设置为使用全屏独占模式,并在自定义线程中进行活动渲染。我决定使用的游戏循环是固定时间步长变量渲染类型。这种类型的游戏循环应该尽可能快地渲染设备可以处理,我对此并不完全满意。所以我试图使用来限制帧速率。 如果我关闭所有渲染,并简单地在游戏循环中更新游戏,< code>Thread.sleep(1)大约在< code>1 ms内成功Hib

  • 我使用 C 和 POSIX 线程创建了一个多线程应用程序。我现在应该阻塞一个线程(主线程),直到设置了布尔标志(变为真)。 我找到了两种方法来完成这件事。 > 在没有睡眠的情况下旋转。 在睡眠中旋转循环。 如果我应该遵循第一种方式,为什么有些人编写代码遵循第二种方式?如果应该使用第二种方法,为什么要让当前线程Hibernate呢?这种方式的缺点是什么?

  • 问题内容: 我正在编写需要定时精确的代码。我用机器人进行一些操作,然后我用了行动之间要经过的。但是我没有得到最好的结果,因为当我搜索它时,它是不准确的。做到这一点的最佳方法是什么?我的意思是用其他方法模拟。 问题答案: 除非您使用专门为此设计的语言/框架,否则现代OS中的时序永远都不是精确的。但是,您可以在大多数操作系统中以合理的不确定性进行工作。但是“合理”取决于您要解决的问题。 在Java中,

  • 问题内容: 有人可以告诉我这为什么起作用: 但这失败了: 这是错误: 问题答案: 这行: 是一个简短的变量声明,右侧表达式为:。是包中的类型常量,其类型为;并且是一种 无类型数值常量 ,其在表达时,将可能的话采取适当的类型。由于具有作为其基础类型,因此可以在不损失精度的情况下将常量转换为常量,从而可以执行常量表达式。 另一行: 第一行是一个简短的变量声明,其中的类型将从右边的表达式中推断出来,这是

  • 脚本: 一群汽车从北向南(viceversa)沿着一条双车道道路行驶。过了一会儿,他们到达了一座桥。这座桥是单向的,通行能力有限。一辆汽车花100毫秒通过这座桥。不允许发生交通碰撞。 假设我需要计算,对于所有的车, 从车辆请求进入桥梁到开始穿越之间的时间。 例如:如果一辆向北行驶的汽车到达桥上,发现桥上有汽车向南行驶,它必须等待。它需要等多久?当然,如果只有一辆车(桥是空的),汽车的等待时间=0。

  • 我正在编写一个代码,希望在计时时有一定的精度。我使用机器人做一些动作,然后使用,以便在操作之间运行。但我并没有得到最好的结果,因为当我搜索它时,睡眠不准确。实现这一目标的最佳方式是什么?我的意思是模拟线程。用其他方法睡眠。