您好,我尝试每 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)
被忽略了,因为我的线程每毫秒执行一次而不是延迟
这是我的加入
方法:
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
。
关于Java Thread.sleep(延迟)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48510398/