Multi-threading is the use of a single copy of a program to process several sets of data which are at different stages of processing. This is most useful in a multi-tasking situation where tasks may need to be launched at any time. Only one copy of the program needs to be loaded, which saves memory. The program design ensures that the data for each thread is kept separate and that the appropriate program instructions act on the thread which is being executed.