A Habanero Java a Javából ismert összes vezérlési szerkezetet támogatja, amelyeket a párhuzamos végrehajtásra gondolva a következő foreach-jellegű ciklus-konstrukciókkal egészítettek ki.
A következő konstrukciókban a ciklus tartományát meg lehet adni region vagy arrayView típusú objektummal is. A példákban csak a tartományokkal történő definiálás szerepel, ezek helyére egyszerűen beírható egy arrayView objektum is.
Sajnos a fentieken kívül semmi mással nem definiálható a ciklus tartománya, így a foreach ciklus Javabeli képességeit elvesztettük.
Ez még nem párhuzamos konstrukció, csak a Javából ismert foreach-ciklus, mely sorban bejárja a tartományt, az elemek lexikografikus sorrendjében.
Az 1.2-es verziótól kezdve általában használhatók a koordinátaváltozók a ciklus törzsében elhelyezett párhuzamos szerkezetekben is. Korábban a párhuzamos szerkezetekben használható külső változókra tett megszorítás miatt csak a következőhöz hasonló formában lehetett használni a koordinátaváltozókat párhuzamos szerkezetekben:
A tartomány minden eleméhez létrehoz egy tevékenységet, és abban hajtja végre a ciklusmagot. Tartozik hozzá egy implicit finish, így a hagyományos ciklusokhoz hasonlóan, a szülő tevékenység csak akkor mehet tovább, ha a ciklusban minden elem feldolgozása befejeződött.
Ezen felül minden forall-ciklushoz tartozik egy névtelen phaser, melyhez a létrehozott tevékenységek kapcsolódnak.
A fenti kód végrehajtásának eredményeképpen először mind az 5 tevékenység kiírja az első üzenetét, melyek sorrendje a konkurencia miatt előre nem tudható. Ezután valamelyik tevékenység kiírja a "Phase transition." sort, tehát ez egyszer kerül megjelenítésre. Végül következhetnek a második üzenetek, melyek sorrendje szintén nem megjósolható. Mindez phaser explicit deklarációja nélkül.
A forall-hoz hasonlóan külön tevékenységeket hoz létre, de nem tartozik hozzá implicit finish, így a szülő folyamat azonnal tovább mehet. A konstrukcióhoz nem tartozik implicit phaser sem, a létrejövő tevékenységeket már korábban létrehozott phaserekhez kapcsolni a phased kulcsszó segítségével, explicit módon lehet.
Szemantikailag a következő ciklussal egyezik meg:
Ebben a konstrukcióban a ciklus tartományát region és arrayView mellett dist típusú objektummal is meg lehet adni.
A foreach-hez hasonlóan hozza létre a párhuzamos tevékenységeket, és region vagy arrayView tartomány esetén azzal teljesen megegyezően működik. Adott dist típusú objektum esetén azonban a tartomány minden pontjához a hozzá tartozó tevékenységet a leképezés által meghatározott helyen hajtja végre. Ez a lehetőség elosztott tömbök esetén lenne hasznos, hogy a tömb minden elemét ott dolgozzunk fel, ahol fizikailag megtalálható.
Adott tartomány és a hozzá tartozó leképezés esetén: