Разница между Lock.withLock и синхронизация в Kotlin

Есть ли разница (отличная от предпочтения) между

someLock.withLock { sharedResource.operation() } 

а также

 synchronized(someLock) { sharedResource.operation() } 

в Котлине?

Расширение withLock работает с экземплярами Lock такими как ReentrentLock , тогда как synchronized может использоваться с любым объектом.

Технически не важно, какой объект вы заблокируете, если вы используете один и тот же объект для всех соответствующих блоков кода, которые необходимо синхронизировать друг с другом