Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中暂停线程?_Java_Multithreading - Fatal编程技术网

如何在java中暂停线程?

如何在java中暂停线程?,java,multithreading,Java,Multithreading,考虑以下代码: while(true){ someFunction(); 睡眠(1000); } 我想要的是,每隔10秒调用一次someFunction()。但事实并非如此。它每秒钟都在被呼叫。我试过线程。等等(1000),但即使这样也没用。我去掉了while部分,只保留了尸体,最后写道: Thread.start() 但它带来了一个例外。还有其他解决方案吗?它每秒都会被调用,因为你睡了1000毫秒,也就是1秒 将其更改为Thread.sleep(10000),这样对您会更好 或者,使用 Thr

考虑以下代码:

while(true){ someFunction(); 睡眠(1000); }

我想要的是,每隔10秒调用一次someFunction()。但事实并非如此。它每秒钟都在被呼叫。我试过线程。等等(1000),但即使这样也没用。我去掉了while部分,只保留了尸体,最后写道:

Thread.start()


但它带来了一个例外。还有其他解决方案吗?

它每秒都会被调用,因为你睡了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);
}