
S threadmi zle, bez threadov este horsie
Ak ste citali kapitolu Programovanie v jazyku Java,
urcite ste si vsimli applet, ktory na obrazovke roluje text.
Samotne rolovanie textu je zabezpecene threadom. Da sa to
prakticky naprogramovat aj bez threadu. Ukazeme si
obidve riesenia a porovname ich funkcnost a eleganciu.
Riesenie bez threadu
Klasicke riesenie vyzera takto. Na vykreslovanie pouzivam
metodu public void paint(Graphics). V nej vykreslujem
postupne retazec, ktory chcem posuvat na obrazovke v smere
osi x. Znamena to, ze mam premennu xt, ktora sa
inkrementuje v metode public void utekaj().
Potom metodu public void paint(Graphics) volam
zo vsetkych ostatnych metod pomocou repaint(),
ktora vola public void paint(Graphics).
Pozrite si zdrojovy text,
bude vam to hned jasne.
Toto riesenie ma vela nevyhod. Skuste si napriklad pozriet,
kolko casu CPU zabera applet Black, ktory predstavuje riesenie bez threadu.
Skusal som to na 486DX2/66/16MB a tento applet mi doslova
zozral cely strojovy cas. Vyuzitie procesora bolo 100%.
Sice na druhej strane mate o jeden thread v jadre menej ako
v nasledujucom priklade.
Tip: Skuste pri predchadzajucom applete rychlejsie hybat
mysou.
Riesenie s threadom
Applet ScrollText z kapitoly Programovanie v jazyku Java
som upravil, pretoze bol trosku neprehladny. Applet
ScrollText2
tiez roluje text na obrazovke, ale nic ine okrem toho ho netrapi.
(napr. nenastavuje font,...)
Zdrojacik
je potom omnoho prehladnejsi (a samozrejme komentovany).
Pri spusteni odporucam sledovat vyuzitie CPU. V mojom pripade
to bolo cca 5%, co je oproti predchadzajucim 100% vyrazny pokles.
Poznamka: Pri spustani pomocou appletviewer som
dosiahol spominanych 5%, avsak pri spusteni z NetscapeNavigatora
to bolo okolo 50%. Ale aj to je rozdiel.
Tento priklad si odporucam pozriet, pretoze ukazuje ako
implementovat rozhranie Runnable, o ktorom som
uz pisal v kapitole Thready v Jave.