gpt4 book ai didi

java - (可能)非常简单的Java多线程问题

转载 作者:行者123 更新时间:2023-12-02 03:56:15 29 4
gpt4 key购买 nike

我正在制作一款平台游戏,让玩家每 30 毫秒跳跃一次,并向上添加少量的力。我想我应该使用多线程,因为我之前已经做过一些,而且看起来很简单。无论如何,我尝试了这个:

public void jump() {
new Runnable() {
public void run() {
for (int i = 0; i <= jumpForce; i++) {
velocity.y++;
System.out.println("Adding force");
try {
wait(30);
} catch (InterruptedException e) {}
}
}
}.run();
}

现在,我认为这会做的是从0到jumpForce(在本例中为50)的每个循环,它在y速度变量上加1,然后等待30ms,但实际发生的是我收到一个名为:

的错误
java.lang.IllegalMonitorStateException

我不知道这意味着什么,所以有人可以告诉我我做错了什么吗?

最佳答案

如果您想在不同的线程中执行此代码,那么您不应该调用 Runnable 的 run() 方法。您应该做的是创建线程的实例并将 Runnable 实现放入其构造函数中。然后调用.start()

 public void jump() {
new Thread(new Runnable() {
public void run() {
for (int i = 0; i <= jumpForce; i++) {
velocity.y++;
System.out.println("Adding force");
try {
Thread.sleep(30);
} catch (InterruptedException e) {}
}
}
}).start();
}

此外,在这种情况下,您应该sleep()线程而不是wait(),因为您尚未获取对象锁。为了使用 wait() 实现您需要的功能,jump() 方法必须synchronized 并且另一个线程必须调用它。

关于java - (可能)非常简单的Java多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35420183/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com