2015-09-23 2 views
0

Я создаю параллельное приложение на Java. Для того, чтобы не подвергать мой объект блокировки внешне, у меня есть объект с privatefinal блокировки:В Java безопасно ли блокировать и синхронизировать один и тот же объект?

private final Object Lock = new Object(); 

я использую блокировку для синхронизации между потоками:

synchronized (Lock) { 

    // Do stuff 
} 

Я также использовать блокировку ждать условий :

while (conditionIsNotMet) { 

    Lock.wait(); 
} 

Использование одного и того же объекта для обоих шаблонов параллелизма вызывает проблемы? Есть ли что-то, что я должен соблюдать, когда это делаешь?

+0

Не уверен, что я понимаю. Для работы 'wait()' вам нужно иметь как для работы. – sstan

+0

Мне нужно 'synchronized' использовать' wait() '? – sdgfsdh

+0

Попробуйте вызвать 'wait()' вне блока 'synchronized'. Что происходит? – sstan

ответ

1

Как правило, плохой практикой является использование Lock для более чем одной цели. Как правило, вам необходимо связать блокировку с вашим условием, а другую - синхронизировать доступ к общим данным. Тем не менее, ничто не мешает вам это делать.

Обновление: При этом следует отметить комментарий @sstan - вам необходимо заблокировать замок до его ожидания. Если вы также используете Lock в другом месте, где не, связанный с условием, вы просите о взаимоблокировке.