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 klasickyThread mojThread = new Thread("Moj thread"); mojThread.start();Stavy threadu
Ako som uz vyssie uviedol, thread moze byt v niekolkych stavoch. Su to stavy:
- NEW_THREAD oznamuje, ze thread este nie je vytvoreny, ale je mozne ho vytvorit. System este nealokoval ziadne systemove zdroje.
- RUNNABLE znamena, ze thread je beziaci. POZOR! nemusi to znamenat, ze kod threadu sa v tomto case vykonava procesorom. Znamena to, ze thread bezi na procesore alebo je pripraveny, ale momentalne caka na jeho uvolnenie inym beziacim threadom. Do tohto stavu sa thread dostava po aplikovani metody start().
- NOT_RUNNABLE priznakuje, ze thread "nebezi". Moze to mat niekolko dovodov. Jednym z nich je pouzitie metody suspend().
- DEAD znamena, ze thread zanika. Thread ziskava tento priznak, ak bola volana metoda stop() alebo ak sa kod v tele threadu vykonal cely!
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 InterruptedExceptionCaka, 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 InterruptedExceptionMetoda 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).