Java logoPredDalej

Thready v Jave

Este trochu teorie

Pozrieme sa, co je to thread v Jave.
Mohol by som sucho napisat, ze thread je instancia triedy Thread a potomkov danej triedy, co je rozhodne pravda.
Thread je podpora multiprogrammingu ( jeden procesor a viac programov v rovnakom case). Thread je potom cast programoveho kodu, ktory je vykonavany nezavisle od ostatnych casti. Urcite by sa dalo o tom filozofovat dlhsie, pretoze thread nemusi byt az taky nezavisly, ako by sme chceli alebo si zelali. Klasicky program (bez threadov) sa nachadza v tom istom case, na tom istom mieste, pri tych istych vstupoch a v tych istych vonkajsich podmienkach (typ procesora, ostatne programy v pameti, ...). V programe pozostavajuceho z threadov to nemusi byt tak.

Jednoduchy thread mozeme vytvorit nasledujucim riadkom:

Thread mojThread = new Thread("Moj thread");
Takymto sposobom vytvorime thread, ktory nie je v stave BEZIACI. Ak chceme, aby presiel do stavu BEZIACI (RUNABLE), musime zavolat metodu start(). Toto volanie metody start() mozeme previest aj hned pri vytvoreni threadu nasledujucim sposobom:

Thread mojThread = new Thread("Moj thread").start();

alebo klasicky
Thread mojThread = new Thread("Moj thread");
mojThread.start();

Stavy threadu

Ako som uz vyssie uviedol, thread moze byt v niekolkych stavoch. Su to stavy:

Trieda Thread

je definovana v java.lang.Thread, ktora je odvodena od triedy java.lang.Object, co je zakladna trieda pre vsetky triedy v Jave.
V manuali k Jave by sme sa este docitali, ze trieda java.lang.Thread implementuje Runnable. Co to znamena?
Runnable je rozhranie, ktore poskytuje protokol pre objekty, odvodene od java.lang.Objects, ktore chcu vykonavat kod, pokial su aktivne. Tento interface sa pouziva, ak chceme prepisat, len metodu run() alebo v pripade, ak chceme predat jeden thread druhemu ako parameter.
class MojThread implements Runnable {
	public void run() {
		// prepisanie Thread.run()
	}
}

MojThread dummyThread = new MojThread("Dummy Thread");
new Thread( dummyThread ).start();

Zakladne metody (okrem uz menovanych)

public static Thread currentThread()
Vrati referenciu na prave beziaci thread.

public final boolean isAlive()
Vrati hodnotu typu Boolean. Ak je thread aktivny vrati hodnotu true inak vrati hodnotu false.
public final void join() throws InterruptedException
Caka, pokial neprejde thread do stavu DIED. Ak thread A da join na thread B, tak thread A caka na thread B, pokial sa neskonci.
public final void setPriority(int newPriority)
Nastavuje prioritu threadu.
public static void sleep(long millis) throws InterruptedException
Metoda prerusi prave vykonavany thread a necha ho "spat" (nie je aktivny) na cas specifikovany v milisekundach.
public static void yield()
Touto metodou sa thread "vzda" procesora, cize ho prenecha inemu threadu, ktory je v stave RUNNABLE (pripraveny na beh).
zaciatok