如何在java中暂停线程?
考虑以下代码: while(true){ someFunction(); 睡眠(1000); } 我想要的是,每隔10秒调用一次someFunction()。但事实并非如此。它每秒钟都在被呼叫。我试过线程。等等(1000),但即使这样也没用。我去掉了while部分,只保留了尸体,最后写道: Thread.start()如何在java中暂停线程?,java,multithreading,Java,Multithreading,考虑以下代码: while(true){ someFunction(); 睡眠(1000); } 我想要的是,每隔10秒调用一次someFunction()。但事实并非如此。它每秒钟都在被呼叫。我试过线程。等等(1000),但即使这样也没用。我去掉了while部分,只保留了尸体,最后写道: Thread.start() 但它带来了一个例外。还有其他解决方案吗?它每秒都会被调用,因为你睡了1000毫秒,也就是1秒 将其更改为Thread.sleep(10000),这样对您会更好 或者,使用 Thr
但它带来了一个例外。还有其他解决方案吗?它每秒都会被调用,因为你睡了1000毫秒,也就是1秒 将其更改为
Thread.sleep(10000)
,这样对您会更好
或者,使用
Thread.sleep(TimeUnit.SECONDS.toMillis(10));
这意味着你不必自己做算术。(许多API现在都采用了数量和时间单位,但不幸的是,Thread.sleep
似乎没有这样的功能。)
请注意,这将使线程在10秒钟内无响应,并且没有明确的方式告诉它唤醒(例如,因为您想关闭它)。我通常更喜欢使用wait()
,这样我就可以从不同的线程中对同一个监视器进行脉冲,以表示“我希望你现在就醒来!”这通常是在表单的while循环中进行的
while (!shouldStop())
编辑:tvanfosson使用
定时器的解决方案也很好-另一种选择是使用更灵活(更容易测试)的定时器。Thread.sleep()。因此,调用Thread.sleep(1000)
睡眠1000毫秒,即1秒。将该设为Thread.sleep(10000)
,它将休眠10秒。您可能想做的是使用计时器,设置函数的预定调用,而不是休眠。如果你需要更精确的时间间隔,你可以记录距离上次跑步已经有多长时间了,并调整新的计时器以防止你的时间间隔漂移。请参阅本文中的简单计时器示例
关于参数的精确性,我不会详细讨论这个问题,因为@Jon已经讨论过了——你需要的是毫秒而不是秒
我想要的是,someFunction()是
每10秒打一次电话
那么为什么要调用Thread.sleep()
,参数为1000?这是以毫秒为单位的,所以你明确地说“等待1秒”。1秒是1000毫秒,所以如果你想要10秒=10*1000=10000毫秒
e、 g
假设1000毫秒是1秒。为此,你应该使用Thread.sleep(10000)来实现在10秒内暂停你的线程。您还可以使用循环来计算线程等待的秒数。
假设你想在半小时(30分钟)内暂停你的线程。然后用,
for(i=0;i<1800;i++)
{
Thread.sleep(1000);
}
for(i=0;i你认为一秒钟有多少毫秒?(提示:不是100)哈哈。我的错。我没意识到我放的是1000而不是10000!!:)@Jon,我们确定mithun1538正在使用ThreadPool吗?ThreadPool?我以前没听过这个词。我正在开发一个简单的应用程序,所以我猜我没有使用“ThreadPool”。此外,线程可能会被中断唤醒。
for(i=0;i<1800;i++)
{
Thread.sleep(1000);
}