also: defs, java fields, agents
The clojure website has documentation for these concepts:
I understand the words, but I don't conceptually get the purpose / meaning of these. When should I / how can I know when to use them?
Keep in mind that aborted transactions will be replayed. What does this mean?
One use of agents is to have a controlled side effects. Consider this:
The STM will hold all of the actions needed to be sent to agents until succeed.
What is difference between atoms and agents?
Atoms and agents don't need to run inside a transaction, refs should be (coordinated changes, remember?)