繁体   English   中英

Java Thread.sleep(delay)无法正常工作

[英]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方法的主体)执行一次。

您正在尝试延迟每个玩家。 然后,您需要将Thread.sleep(delay)放在player.join()之后的循环中:

for (int i = 0; i < amount; i++) {
    Player player = ...;
    player.join();

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

否则, 所有播放器都已处理之后 ,您将延迟这是没有意义的。

确保正确设置了delay变量。 Thread.sleep花费的时间以毫秒为单位。 为了感觉不同,该值应>1000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM