номер
Это не гарантировано.
Вы должны синхронизироваться по X, чтобы обеспечить целостность. Обратите внимание, что вам следует избегать включения фактической отправки и получения в синхронизированный блок.
Thread A
synchronize( X ) { Thread B
[modify Object X]
[build request A using data from X]
}
[Send a request A over TCP by NIO]
[receive response for request A over TCP by NIO]
[read Object X] // assuming from a synchronized database or collection.
synchronize( x ) {
[handle the response]
}
[call methods in other objects]
Если обрабатывается ответ в потоке B, используйте состояние в X, чтобы убедиться, что вы можете обработать сообщение.
Если вам нужно вызывать другие части системы, которые также используют подобные блокировки и могут вызывать методы в X, вам нужно проделать определенную работу, чтобы убедиться, что вы не получите тупик. Например, убедитесь, что вы можете снять блокировку перед вызовом других объектов.