Я наткнулся на этот метод в проекте, над которым я работаю, и сразу подумал, что что-то не так. У меня было ощущение, что это не может быть ничем иным.Вложенные 'synchronize': как этот синхронизированный метод Java будет реорганизован - и может ли это иметь какой-то смысл?
Но я не понимаю намерений и последствий этого. Может ли это быть реорганизовано? Обеспечивает ли вторая синхронизация какой-либо смысл - и не является третьим синхронизированным избыточным/ненужным?
Я только начинаю работать в расширенном параллельном/потоковом программировании в java - подробное объяснение, почему это имеет смысл или нет смысла и почему очень ценится!
@Override
public synchronized void run() {
synchronized (this.market) {
synchronized (this.market.getWallet()) {
this.handler.handleEvent(new WalletLecherEvent(this, market,
market.leechWallet()));
}
}
}
заранее спасибо
редактировать, для того чтобы поставить больше контекста:
public class WalletLeecherWorker extends Worker {
private IAbstractMarketAPI market = null;
private Thread thread = null;
public WalletLeecherWorker(IEventHandler handler, IAbstractMarketAPI market) {
super(handler);
this.market = market;
}
public void startThread() {
if (thread != null)
return;
thread = new Thread(this);
thread.start();
}
public MARKETs getMarket() {
return this.market.getName();
}
@Override
public synchronized void run() {
synchronized (this.market) {
synchronized (this.market.getWallet()) {
this.handler.handleEvent(new WalletLecherEvent(this, market,
market.leechWallet()));
}
}
}
}
..и метод market.getWallet()
:
@Override
public Wallet getWallet() {
return this.wallet;
}
Я думать, что чем цель состоит в том, чтобы заблокировать все потоки от старый Кошельки, поэтому невосприимчиво синхронизированы/устарели данные - до тех пор, пока этот поток работает();
Ни один из ваших вопросов не подлежит обсуждению без дополнительного контекста. Это зависит от того, кто еще имеет доступ к этим ценностям и каким образом. – shmosel
Я понимаю @shmosel, но разве это не вызывает повышенного подозрения? Вторая синхронизированная синхронизация доступа к this.market - следующий код синхронизирует доступ к методу одного и того же объекта - разве это не избыточно? Я добавлю еще несколько контекстов. – Gewure
Подозрительный? Да. Неправильно? Я не могу сказать. – shmosel