我怎么能做一个线程循环?

时间:2012-02-11 05:45:48

标签: java multithreading

每隔3秒,我希望服务器发送一条消息。 为此,我有这段代码。

    try {
        Thread.sleep(3500);
        getPackets().sendGameMessage("[Server Message]: Remember to vote!");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

代码工作当然等待3秒半,发送消息。 但是我怎么能让它循环,所以每隔3秒半,它会不停地发送它?

4 个答案:

答案 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