Java logoPred

S threadmi zle, bez threadov este horsie

applet Black versus applet ScrollText2

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.

zaciatok