Мне любопытно, каковы будут следующие эффекты:
Object mutex;
... // mutex initialized in constructor etc.
public setMutex(Object mutex) {
synchronized(this.mutex) {
this.mutex = mutex;
}
}
Я видел похожие вопросы с советами против подобных действий на других языках, но ничего специально для Java.Я также видел много вопросов о том, почему кто-то, возможно, захотел бы сделать это, поскольку это, казалось бы, саморазрушающийся код.
Мое обоснование заключается в том, что другие критические разделы моего кода могут использовать мьютекс, когда setMutex ()называется, и я не хочу переназначать мьютекс до тех пор, пока эти критические секции не завершатся.Таким образом, речь идет не столько о защите от расы при настройке мьютекса, сколько о сохранении целостности того, что защищает мьютекс.Я надеюсь, что это имеет смысл:)
Лично я думаю, что это должно работать просто отлично, но я действительно не знаю.
РЕДАКТИРОВАТЬ: удалил ключевое слово "synchronized" из сигнатуры метода ...musta brainfartet, пока я печатал.