Java still doesn't provide persistent data structures out-of-the-box. IMHO these are more important than lock-free mutable data structures.
When one really does need shared mutable state, Haskell supports transactional updates to mutable state (STM), with optimistic locking and rollbacks. It's awesome, but unfortunately just not practically possible in any language with rampant untracked side-effects.