Синхронизация с локальной переменной не принесет ничего полезного, поэтому вы можете безопасно удалить этот блок.
Каждый поток, вызывающий doDecode
, будет иметь свою собственную копию аргументов метода, поэтому вы можете быть уверены, что ни один аргумент не будет изменен между .
Я предполагаю, объединение этих кусков означает сохранение их в некотором поле члена вашего Decoder
класса.
В этом случае вы, вероятно, хотите выполнить синхронизацию на поле. Например:
private final Object lock = new Object();
@Override
protected boolean doDecode(IoSession ioSession, IoBuffer ioBuffer, ProtocolDecoderOutput protocolDecoderOutput) throws Exception {
// ...
synchronized (this.lock) {
// do concatenation operations and other stuff
}
// ...
}
Я просто не уверен, является ли хорошей практикой синхронизация внутри компонента инфраструктуры, который, вероятно, предназначен для одновременной обработки запросов.