Párhuzamosság
A szálak olyan programrészeket jelentenek, melyeket a rendszer egy időben, egymással párhuzamosan hajt végre, ilyenkor garantálja, hogy minden nem-blokkolt és nem-terminált szál előbb-utóbb kap processzoridőt. 3 prioritási szintet különböztetünk meg (magas, közepes, alacsony), ami meghatározza, hogy a szál milyen gyakran kap időszeletet, de a magas prioritású szálak nem éheztethetik ki az alacsonyabb prioritású szálakat.
Új szál a thread S end utasítással indítható, ahol az új szál az S –et fogja végrehajtani.
Szintaxis
Szál terminálásának detektálása sem bonyolult. Ha N db szálat indítunk az alábbi módon, ahol Ti –k végzik az egyes szálak feladatát:
thread T1 X1=unit end
thread T2 X2=X1 end
...
thread TN XN=XN-1 end
Az Xk változó kötötté válik, mihelyt T1 – Tk –k befejeződtek, így a főprogramban kiadott {Wait XN} utasítás addig blokkolja a főprogram végrehajtását, míg az összes indított szál nem terminál.
Minden szálnak egyedi neve van, ami a Thread.this/1 eljárással kérdezhető le. Név alapján hivatkozhatunk a szálakra. Az alap Thread csomag által biztosított műveletek lehetőséget adnak pl. egy „idegen” szál terminálására vagy kivételt is kiválthatunk benne.
Szálak egymással portokon vagy osztott objektumokon keresztül kommunikálhatnak. Utóbbinál nagy figyelmet kell fordítani arra, hogy az objektum minden művelet után koherens állapotba kerüljön. A kölcsönös kizárás elve egy jó megoldást ad erre. Az Oz ezt nyelvi szinten, zárakkal támogatja.
Kommunikáció
A Mozart rendszer elintézi a kommunikációt a szálak között, így ez automatikus.
Szinkronizáció
Szintén a Mozart rendszer feladata.