Készíts két szálat és futtasd őket. A szálak írják ki a hello 1, hello 2, …, hello 100000 és world 1, …, world 100000 szövegeket.
Figyeld meg, hogy a kimenetek összefésülődnek.
Futtass három szálat, a harmadik other 1 stb. szövegeket írjon ki.
Egy tömb szövegeket tartalmaz, mindegyikhez készíts és futtass a fentiekhez hasonló szálakat.
Írd fájlba a kimenetet (PrintWriter).
Ügyelj arra, hogy a fájlt zárd is be a kiírások végén.
Készíts olyan metódust, amely a println működését utánozza: a paraméterként kapott szöveget karakterenként írja ki, és még egy sorvégét utána. Próbáld ki a fenti kiíratásokat az új metódussal.
Kísérletezz szálakkal.
Figyeld meg a szálak működését a VisualVM használatával.
Java 8 alatt az eszköz a sztenderd telepítés része, jvisualvm paranccsal futtatható.
IDE segítségével szüneteltesd a szálak futását (suspend).
Vizsgáld meg a változóik tartalmát. Írd át a változók értékét, és folytasd a futtatást.
Nevezd el a szálakat (setName).
Csoportosítsd a szálakat (ThreadGroup).
Állítsd be a szálak prioritását. Változik-e a kimenet?
Készítsd el a szálakat több különböző módon: Runnable típusú lambdából készített Thread példányként, Thread leszármazott osztály példányaként, Runnable interfészt implementáló osztály példányaként.
Ellenőrizd, hogy egy feladat végrehajtása több szálon jelentős gyorsulást okoz(hat).
Add össze az 1..1_000_000_000 intervallum számait egy szálon.
Mérd ki a System.nanoTime() felhasználásával, ez mennyi időbe telik.
Ezután 10 szálon add össze az 1..100_000_000, 100_000_001..200_000_000 stb. intervallumok számait, és az adódó összegek értékeit add össze egy static változóba.
Mérd ki a System.nanoTime() felhasználásával, ez mennyi időbe telik.
Írd ki a program végén a gyorsulás mértékét.
Készíts sok szálat.
Készíts két szálat, amelyek készítsenek 10-10 szálat. Ezek mind írjanak ki százezer szöveget az első feladathoz hasonlóan, hello1, hello2 stb. és world1, world2 stb. prefixekkel.
Egy tömbben fájlnevek vannak megadva. Minden fájlhoz indíts egy szálat, ami soronként kiolvassa a tartalmát, és kiírja a sztenderd kimenetre.
A program működése lassítható a Thread.sleep művelet használatával.
A sleep paraméterét a program mindig véletlenszerűen válassza a 100..200 intervallumból.
A fájl sorait kiíró programot bővítsd úgy, hogy lehessen megadni neki néhány számpárt is.
N,M,N2 jelentse azt, hogy az N-edik fájlt beolvasó szál, miután M kiírást megtett, be kell, hogy várja az N2-edik fájlt beolvasó szál futását, és csak utána folytathatja a fájlja sorainak kiírását.
Tipp: ki kell találni, hogy az N-es szál hogyan érheti el az N2-es szálat.
Időzítés.
Egy tetszőleges korábbi feladat megoldását bővítsd egy olyan szállal, amelyik másodpercenként kiírja, hány szál aktív még (Thread.currentThread().getThreadGroup().activeCount()). Ha már csak ez a szál maradt meg, lépjen ki.
A másodpercenkénti működést először a Thread.sleep művelet használatával oldd meg.
Készíts egy másik megoldást is, ebben a Timer osztály scheduleAtFixedRate metódusát használd.