Java Thread.sleep(延迟)不工作

Java Thread.sleep(delay) not working

嗨,我正在尝试每 X 秒执行一次任务,但我遇到了问题:

Thread joinThread = new Thread(() -> {
    for (int i = 0; i < amount; i++) {
        Player player = new Player(user, RandomUtils.randomString(10), host, p, event.getSession());
        player.join();
    }

    try {
        Thread.sleep(delay);
    } catch (InterruptedException ignored) {
        ignored.printStackTrace();
    }
});

joinThread.start();

看起来 Thread.sleep(delay) 被忽略了,因为我的线程每毫秒执行一次,而不是延迟

这是我的 join 方法:

public void join(){
    GameProfile profile = session.getFlag("profile");
    Client c = new Client(host, port, new MinecraftProtocol(name), new TcpSessionFactory(proxy));
    c.getSession().addListener(new SessionAdapter() {
        @Override
        public void packetReceived(PacketReceivedEvent event) {
            if (event.getPacket() instanceof ServerJoinGamePacket) {
                user.setBotAmount(u.getBotAmount()+1);
                user.addBot(event.getSession());
                System.out.println("Player bot joined");
            }
        }

        @Override
        public void disconnected(final DisconnectedEvent event) {
            if(event.getCause() != null) event.getCause().printStackTrace();
            user.setBotAmount(u.getBotAmount() -1);
        }
    });
    c.getSession().connect();
}

如果删除 player.join();,效果会很好。
有什么建议吗?我不明白我做错了什么。

首先,线程的主体(run 方法的主体)执行一次。

您正在尝试为每位玩家设置延迟。然后你需要在 player.join():

之后将 Thread.sleep(delay) 放在循环中
for (int i = 0; i < amount; i++) {
    Player player = ...;
    player.join();

    try {
        Thread.sleep(delay);
    } catch (InterruptedException reallyIgnored) {}
}

否则,您将在所有玩家都处理完后进行延迟,这是没有意义的。

确保 delay 变量设置正确。 Thread.sleep 以毫秒为单位花费时间。为了感受差异,该值应该是 >1000.