Код: Выделить всё
public class Foo
{
public synchronized void abc() { ... }
public synchronized void def() { ... }
//etc.
}
К сожалению, похоже, что синхронизация на уровне методов больше не поможет. Вместо этого нам придется начать синхронизацию с самим Foo. Я не думаю, что что-то вроде java.util.concurrent.AtomicReference тоже поможет. Я хочу быть уверен, что никто больше не прикасается к экземпляру Foo во время выполнения определенной (и, возможно, несколько длительной) операции. Итак, теперь у нас в коде будут такие блоки:
Код: Выделить всё
Foo foo = new Foo(); //this got created somewhere
//somewhere else entirely
synchronized(foo)
{
//do operation on foo
foo.doStuff();
foo.doOtherStuff();
}
Итак, мой вопрос заключается в том, есть ли в Java какой-либо механизм (встроенный или сторонний), позволяющий мне генерировать предупреждения или ошибки во время компиляции, если экземпляр Foo доступен вне синхронизированного блокировать?
В идеале это можно сделать с объявлением класса (пример приведен ниже):
Код: Выделить всё
@EnsureSynchronized
public class Foo
{
//etc.
}
Код: Выделить всё
@EnsureSynchronized
private Foo foo;
Поэтому я спрашиваю вас, сообщество SO, если бы вы оказались в такой ситуации, как бы вы попытались обеспечить, чтобы объекты Foo всегда были доступны и изменены только внутри синхронизированного > блоки?
Подробнее здесь: https://stackoverflow.com/questions/775 ... use-of-a-p