Я пытался синхронизировать оба метода, но, похоже, они не различались, потому что они в разных классах?
Да, добавление синхронизированного модификатора в методсинхронизируется на объекте, на котором вызывается метод.То есть
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
не имеет никакого эффекта и, следовательно, не поможет.