Všechny programy kromě jednoduchých konzolově orientovaných aplikací jsou multivláknové. Vlákno je část kódu, které může fungovat nezávisle na ostatních kódech v aplikaci. Tato část kódu se většinou startuje z jiného kousku kódu, ale jakmile je nastartována, běží nezávisle na originálním volajícím a řídí vlastní běh pokud neexistuje nějaká vnější závislost.

Vlákna běží samostatně, ale musí mnohdy také sdílet společné zdroje. Klasické problémy pak jsou synchronizace vzájemných rychlostí a deadlocky.

Aby mohl objekt běžet jako vlákno, musí být třída deklarovaná jako vlákno buď rozšířením java.lang.Thread nebo implementací java.lang.Runnable. V obou případech musí být spuštěna metoda run(), která je Java VM volána při startu vlákna.

Aplikační kód přepisuje metodu run(). Pokud tato metoda existuje, existuje vlákno. připomeňme, že metoda run() je volána VM a ne z uživatelského kódu. Metoda start() je využita pro start vlákna z kódu uživatele, kdy signalizuje VM aby spustil zvláštní vlákno jako instanci třídy. Jakmile existuje metoda start(), je volána metoda run() VM a vlákno je spuštěno. Zastavení běhu vlákna provádí metoda stop(). V Java2 je metoda stop() potlačena, k ukončení exekuce vlákna je možné použít metodu interrupt() k upozornění vlákna.

První příklad používá java.lang.Thread. Tato abstraktní třída může být rozšířena a zajiš»uje základní potřeby pro vytvoření vláken. Je třeba vykonat následující kroky:

Poznamenejme, že k ukončení programu je třeba použít Ctrl-C. Metoda start() připravuje vlákno ke spuštění, metoda run() provádí činnost vlákna a metoda stop() zastaví vlákno. Vlákno umírá je-li metoda run() ukončena, nebo jestliže je vyvolána metoda stop().

Nikdy nevolej metodu run() explicitně.Je volána automaticky podle potřeby za běhu, jakmile je vyvolána metoda start().

Zde je uveden příklad jednoduchého programu, který střídavě spouští dvě vlákna.