Rather than relegating threads to be a machine-level concept, it is possible to describe thread semantics at the programming-language level. Here, a categorical semantics is given for a potentially multithreaded programming language. The thread behavior is packaged as a monad, and the semantics is described both directly and via a semantics-preserving \trampolining" translation into a -calculus-like metalanguage. The semantics captures the notions of incremental work, interleaving, and it...