如何在java中暂停一个线程?

mit*_*538 1 java multithreading

请考虑以下代码:

while(true){someFunction(); 了Thread.sleep(1000); }

我想要的是,someFunction()每10秒调用一次.但这种情况并非如此.它每秒都被召唤.我试过Thread.wait(1000),但即使这样也没有用.我删除了while部分,只是保留了身体,最后写道:

Thread.start();

但它抛出了一个例外.还有其他解决方案吗?

Jon*_*eet 14

它每秒都被调用,因为你正在睡觉1000毫秒,也就是1秒钟.

改变它Thread.sleep(10000),这对你来说会更好.

或者,使用

Thread.sleep(TimeUnit.SECONDS.toMillis(10));
Run Code Online (Sandbox Code Playgroud)

这意味着你不必自己做算术.(许多API现在需要数量和a TimeUnit,但Thread.sleep不幸的是,似乎没有类似的东西.)

请注意,这将使线程无响应10秒,没有干净的方式告诉它唤醒(例如,因为你想要关闭它).我通常更喜欢使用,wait()以便我可以从不同的线程脉冲相同的监视器,以指示"我希望你现在醒来!" 这通常来自表单的while循环

while (!shouldStop())
Run Code Online (Sandbox Code Playgroud)

编辑:tvanfosson使用a的解决方案Timer也很好 - 另一种选择是使用ScheduledExecutorService它可以更灵活(更容易测试).