ну юзай валидаторы для атомов или compare-and-set! если тебе надо отталкиваться от того что в данный момент в стейте и не менять его:
(def a (atom 0))
(compare-and-set! a 10 20)
=> false
@a
=> 0
(compare-and-set! a 0 10)
=> true
@a
=> 10
а так чего удивляться что просто поменял стейт атома из другого треда. Я имел ввиду прежде всего что кложа иммутабельна, и что надо знать как, изменить стейт, а раз знаешь и дошел до этого, то по-любому ты делаешь это осознанно. В общем ладно, я допускаю что я не вник в суть проблемы.