Разница заключается в том, что другие потоки делают в вашей системе.В первом случае, если есть какие-либо причины, по которым некоторая другая логика (определенная в некотором другом коде) не должна использоваться одновременно с методом updateTransaction, эта логика также может быть синхронизирована с объектом account.И наоборот, у вас может быть ложная синхронизация, если какой-то не связанный код также использует учетную запись в качестве блокировки, когда он не имеет никакого отношения к updateTransaction.
Во втором случае объект блокировки виден только классу Client, поэтомувам гарантируется, что единственная синхронизация, которую вы выполняете, - это то, что вы указали в этом классе.
Я согласен с Питером Лоури, что лучший подход заключается в инкапсуляции логики синхронизации в одном месте, где это имеет смысл, ииспользуйте для этого закрытые / защищенные объекты блокировки видимости.