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));
这意味着你不必自己做算术.(许多API现在需要数量和a TimeUnit,但Thread.sleep不幸的是,似乎没有类似的东西.)
请注意,这将使线程无响应10秒,没有干净的方式告诉它唤醒(例如,因为你想要关闭它).我通常更喜欢使用,wait()以便我可以从不同的线程脉冲相同的监视器,以指示"我希望你现在醒来!" 这通常来自表单的while循环
while (!shouldStop())
编辑:tvanfosson使用a的解决方案Timer也很好 - 另一种选择是使用ScheduledExecutorService它可以更灵活(更容易测试).
| 归档时间: | 
 | 
| 查看次数: | 10028 次 | 
| 最近记录: |