2016-04-30 6 views
1

В шаблоне делегирования, если у меня есть конкретный класс и класс-оболочки:, какой метод должен быть синхронизирован в шаблоне делегирования в Java

class Wrapper { 
    Concrete concrete = new Concrete(); 
    void fn() { 
     concrete.fn(); 
    } 
} 

class Concrete { 
    void fn() { 
     ... 
    } 
} 

Если метод fn() должен быть синхронизирован, то где я должен положить синхронизированный ключевое слово? Если мы предположим, что Concrete::fn() будет вызываться только Wrapper::fn(), верно ли, что в любом месте?

+0

Это зависит от ресурса, который вы хотите защитить. – saka1029

ответ

1

Я вижу несколько возможных проблем с использованием синхронизируются на обертке: п():

  • синхронизируется следует использовать с осторожностью: только блокировать те части, которые должны быть синхронизированы.

  • запирающий механизм должен быть забота о конкретной реализации - если это возможно (вы, возможно, осуществление которых не нужно синхронизовать)

0

Как правило, правило заключается в синхронизации, как мало логики насколько это возможно, поэтому, если это выбор между Concrete.fn() и Wrapper.fn(), тогда вы должны синхронизировать Concrete.fn(). Вы также можете посмотреть, нужно ли вам синхронизировать весь метод или меньший блок логики внутри метода.

Также, если требуется всегда синхронизировать Concrete.fn(), и вы синхронизируете Wrapper.fn(), то любой будущий код, который вызывает Concrete.fn(), также необходимо синхронизировать. Если вы синхронизируете Concrete.fn(), вы гарантировали, что не забудете о необходимости синхронизации для любых будущих реализаций.

Смежные вопросы