The Threads library exports a macro for dynamic binding. A binding is a mapping between a variable and a value-cell which holds the variable's value. A dynamic binding is a binding which has dynamic extent, and shadows any outermost bindings. Dynamic bindings can be considered to be a property of the dynamic environment.
Thread variables can have new dynamic bindings created for them with the macro dynamic-bind, page 112. Thread variables inherently have thread-local bindings, so it is possible to re-bind a thread variable dynamically using the Dylan construct block ... cleanup. The dynamic-bind macro can be implemented in this way.
The thread-local nature of dynamically bindable variables may not be optimal for all problem domains. For instance a shared, global, outermost binding may be desirable, or alternatively, a thread may want to inherit current bindings from the parent thread at creation time, giving a "fork"-type model of state inheritance. These alternatives are not pursued in this library, but they might be an interesting area for future research.