[英]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.