延迟8秒不工作?

时间:2017-10-29 00:36:35

标签: java wait

所以,我试图每隔8秒发送一个数据包(With Spigot)。 我会在Spigot论坛上发布这个但我总是在等待时得到错误。我试过Scheduler但没有运气。 代码:

Object obj = new Object();
            try {
                synchronized (obj) {
                    while (true) {
                        for (Player player : Bukkit.getOnlinePlayers()) {
                            System.out.println("Hi");
                            obj.wait(8000);
                        }
                    }
                }
            } catch (InterruptedException exception) {
            }

忽略播放器播放器它什么也不做。 请帮忙。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

wait()是一种用于异步编程的方法,在这种方法中,您需要运行一大块代码,而其他“需要时间”才能完成,以免阻止程序的整个执行。可以把它想象成一种让异步事件发生的机制。根据文档:

  

导致当前线程等待,直到另一个线程调用   notify()方法或此对象的notifyAll()方法。

sleep()是一种方法,它使当前线程暂时待命,直到所需的时间过去,因此它将继续执行:

  

Thread.sleep导致当前线程暂停执行a   指定期限。

前者在异步编程中非常有用,你知道某些东西可能会暂时阻止你的程序执行,并且你想在那段时间做其他事情,比如连接到套接字,可能都在同一个线程中。后者是你想在同一个线程上阻止一切发生的时候。

如果你想要做的只是延迟你的方法的执行,那么这将是要走的路:

try {
    while (true) {
        for (Player player : Bukkit.getOnlinePlayers()) {
            System.out.println("Hi");
            Thread.sleep(8000);
        }
    }
} catch (InterruptedException exception) {
    // Catch something here
}