( persicsb | 2016. 04. 19., k – 19:14 )

Szerintem azt a részét nem érted a dolgoknak, hogy itt a taszkokat mindenképp sorosítani kell, mert ugyanahhoz az adatstruktúrához férnek hozzá (ugyanaz a global scope).
Hogy értsd: feladat3() függ 1-től (nem futhat 1 előtt), de nem futhat feladat2()-vel párhuzamosan sem.

Ez az egész egy happens-before gráfot ír le. Nem párhuzamosításról, hanem sorosításról van szó.
Javaban ugyanezt lockokkal oldod meg, lockokkal írod le a happens-before relációkat.

Illetve azt fejezed még ki így, hogy feladat2() elindulhat anélkül, hogy feladat1() ténylegesen véget érne (mondjuk inputra vár, vagy DB írást csinál).

Ugyebár az, ha több szálad van, de valójában a lockolások miatt mindig csak 1 fut, akkor a kódod semmit nem nyert a (formai) többszálúságon :)

Szerintem te ezt kevered a ServiceWorkerrel, az a konkurens programozás (azaz amikor nincs adatfüggés két végrehajtható kód között) JS-es megoldása.

Hogy a JS-hez hasonlítsam: ez a feladat1()-feladatn() kód az AsyncTaskok vezérlő kódja: minden egyes feladatN() az egy AsyncTask-Future indítás lehet.

Meg azért ugye azt vegyük észre, hogy ha 1 CPU-n futsz, akkor teljesen mindegy, hány szálad vna, egyszerre csak egy műveletet végez ez a gép :)