# Why Clojure? Part 2: Effortless async by design

DevFeed: [Why Clojure? Part 2: Effortless async by design](<https://devfeed.tech/articles/why-clojure-part-2-effortless-async-by-design-32178.md>)

Original publisher: [Read original article](<https://adambard.com/blog/why-clojure-part-2-async-magic/>)

Published: 2013-04-05T00:00:00Z

Content type: opinion

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [async](<https://devfeed.tech/topics/async.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [async](<https://devfeed.tech/tags/async.md>), [asynchronous](<https://devfeed.tech/tags/asynchronous.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [clojure-functions](<https://devfeed.tech/tags/clojure-functions.md>), [code](<https://devfeed.tech/tags/code.md>), [design](<https://devfeed.tech/tags/design.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [stack-overflow](<https://devfeed.tech/tags/stack-overflow.md>), [threads](<https://devfeed.tech/tags/threads.md>)

## AI overview

This second article in a series argues that Clojure makes asynchronous web programming straightforward. It explains using Java threads and closures, futures for deferred results, and Clojure's thread-safe state-sharing mechanisms, including Atoms, Refs, Agents, and Vars.

## Source excerpt

As a second part in what I've decided will be a series attempting to justify my choice of Clojure as a general-purpose web language, I'd like to talk a little bit about writing asynchronous code in Clojure, and just how easy the design decisions made by Mr. Hickey make that.