Coroutines are non-preemptive light-weight processes. Their advantage over threads is that they do not have to be synchronized because they pass control to each other explicitly and deterministically. Coroutines are therefore an elegant and efficient implementation construct for numerous algorithmic problems. This book presents an implementation of coroutines for Java Virtual Machines that efficiently handles a large range of workloads. It imposes no overhead for applications that do not use coroutines and performs well for applications that do. The implementation of two advanced concepts, namely thread-to-thread migration and serialization of coroutines, is also explained along with the API that is used to control them.