The programmer may at any time create threads with the thread_create() function. The program may save threads for later dispatch, or may run them. Each thread has a handle that represents the thread to the various thread manipulation functions, and uCR provides the ThreadQueue class as a container for holding threads. There are no tasks, as systems running uCR are not expected to have virtual memory.
Threads are generally non-preemptive, but interrupt handlers can switch threads so giving the appearance of preemptive threads. There is no special kernel mode, and interrupt handlers have no special threads attached to them.