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
.
嗨,我正在尝试每 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
.