Just a note that AtomicInteger should not expose Lock, as this is an implementation detail of atomicity.
https://www.internalpointers.com/post/lock-free-multithreading-atomic-operations
While not all architectures have lock-free primitive support, the fact some do, mean that this exposure is a second interface atop Atomicity of an Integer
final class AtomicLockingInteger extends AtomicInteger implements Lockable {
/** ... */
}