I personally like your implementation better...but be aware that openJDK's size implementation tries to return a stable size, so if it is changing concurrently it will try 2 (or 3) times, and then will end up locking the entire structure if necessary to ensure the size is stable.

With that said, I DEFINITELY like the quick size check like this.