每隔3秒,我希望服务器发送一条消息。 为此,我有这段代码。
try {
Thread.sleep(3500);
getPackets().sendGameMessage("[Server Message]: Remember to vote!");
} catch (InterruptedException e) {
e.printStackTrace();
}
代码工作当然等待3秒半,发送消息。 但是我怎么能让它循环,所以每隔3秒半,它会不停地发送它?
答案 0 :(得分:3)
我有点惊讶有人在Java中处理网络时不知道如何将代码置于无限循环中。因此,我想知道你真正的问题是“有更好的方法吗?”
对于这个问题,我想说你应该考虑使用java.util.Timer
发送消息,或者使用scheduleAtFixedRate()
从ScheduledExecutorService
获得的Executors.newScheduledThreadPool()
。
答案 1 :(得分:0)
在单独的线程中生成上面的代码并将其包含在while(true)循环中。
答案 2 :(得分:0)
最好的方法是使用计时器。见Java how to write a timer
答案 3 :(得分:0)
这种代码不是很有用,因为它阻塞了当前线程,并且似乎也不必要地使程序逻辑混乱。最好将它委托给在后台执行send的工作线程。另外Thread.sleep
也是不准确的。
从最新的Java版本开始,我认为最优雅的方法是使用ScheduledThreadPoolExecutor
:
ScheduledThreadPoolExecutor executor = new ScheduledThraedPoolExecutor(1);
executor.scheduleWithFixedDelay(new Runnable() {
public void run() {
getPackets().sendGameMessage("[Server Message]: Remember to vote!");
}
}, 0, 3500, TimeUnit.MILLISECONDS);
此外,您不必担心烦人的InterruptedException
。