sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-02 03:56:15 30 4
mua khóa gpt4 Nike

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

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

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

的错误
java.lang.IllegalMonitorStateException

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

1 Câu trả lời

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

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

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

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

30 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com