gpt4 book ai didi

java - 如何跨不同的类和文件创建同步方法?

转载 作者:行者123 更新时间:2023-12-04 06:29:59 25 4
gpt4 key购买 nike

我有多个文件和类。简而言之,当另一个类移动粒子时,将运行计算一个粒子的位置。我遇到的问题是粒子在第一个类完成计算之前就被移动了。我尝试使两种方法同步,但这似乎没有什么不同,是因为它们在不同的类中吗?做到这一点的最佳方法是什么?

编辑:我根本没有使用线程,它似乎在并行运行多个方法。

编辑 2:这是我的代码大纲

MovingParticle.java

public int x, y;

public void shootParticle(){
//move particle and change x, y values
//this method is called by a timer
}

public void drawParticle(){
//draws the particle
}

第二个文件
AllOtherParticles.java

public void checkIfTheyCollide(){
for(run through arrayList){
//check if it collides with each point in array
}

public void drawCluster(){
//draws the cluster
}

最佳答案

I tried making both methods synchronized but that didn't seem to make a different, is it because they are in different classes?



是的,将 synchronized 修饰符添加到方法会在调用该方法的对象上进行同步。那是,
public synchronized void foo() {
// code
}

相当于
public void foo() {
synchronized (this) {
// code
}
}

由于方法驻留在不同的类中, this指的是不同的对象,因此您不会在两种方法中使用相同的锁。

解决您当前问题的合理方法是:
class Particle {
synchronized void setLocation(Location loc) {
// code
}

synchronized Location getLocation() {
return location;
}
}

编辑 : 当然,这假设涉及多个线程。如果只有一个线程, synchronized没有效果,因此无济于事。

关于java - 如何跨不同的类和文件创建同步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533104/

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