Pa rhuzamossa g Java tutorial
ö A program egyszerre tobb mindent is csina lhat ö Lehet˝ segek: í Sza mıta ssal egyid˝ ben IO í Tobb processzor: sza mıta sok egyid˝ ben í Egy processzor tobb programot futtat (process)
Copyright á 2000-2001, Kozsik Tama s
ö tobbfelhaszna lü s rendszer ö id˝ oszta sos technika
í Egy program tobb vegrehajta si sza lbü l a ll (thread)
Cel ö Hatekonysa g novelese: ha tobb processzor van ö Tobb felhaszna lü kiszolga la sa í egy id˝ ben í interakciü
ö Program logikai tagola sa ö az egyik sza l a felhaszna lü i felulettel foglalkozik ö a ma sik sza l a ha lü zaton keresztul kommunika l valakivel
Pa rhuzamossa gi modellek ö Megosztott (shared) í Tobb processzor, ugyanaz a memü riaterulet
ö Elosztott (distributed) í Tobb processzor, mindnek saja t memü ria í Kommunika ciü s csatorna k, uzenetkuldes
ö Mi van, ha csak egy processzor van?
Alkalmaza si teruletek ö Sza mıta silag nehez problema k ö pl. id˝ ja ra s-el˝ rejelzes
ö ö ö ö
Valü s idejú alkalmaza sok Opera ciü s rendszerek Folyamatszaba lyoza si feladatok Szimula ciü k ö pl. a gensek
ö Elosztott rendszerek ö pl. repul˝ teri helyfoglala s
Ha egy processzor van... ö A processzor kapcsolgat a kulonboz˝ folyamatok kozott ö Mindegyiket csak kis ideig futtatja ö A pa rhuzamossa g la tszata ö A processzorid˝ jü kihaszna la sa í Blokkolt folyamatok nem tartja k fel a tobbit í A va ltogata s is id˝ igenyes!
1 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Pa rhuzamossa g egy folyamaton belul ö ö ö ö
Vegrehajta si sza lak (thread) Ilyenekkel fogunk foglalkozni Pehelys„ly„ (Lightweight, keves koltsegú) Leginka bb a feladat logikai darabola sa bü l
Sza lak Java-ban ö Beepıtett nyelvi ta mogata s: java.lang ö Nyelvi fogalom: (vegrehajta si) sza l, thread ö Ta mogatü oszta ly: java.lang.Thread
í De elkepzelhet˝ , hogy kulonboz˝ processzorokra kerulnek a sza lak
ö ”MegosztottÜ jelleg: kozos memü ria
Vigya zat! ö Nagyon nehez pa rhuzamos programot ırni! ö Az ember ma r nem la tja a t ö Sok problema í í í í
kommunika ciü szinkroniza ciü utemezes interferencia
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Vegrehajta si sza lak letrehoza sa
Pelda
ö A f˝ program egy vegrehajta si sza l ö Tova bbi vegrehajta si sza lak hozhatü k letre ö Egy Thread oszta lyba tartozü objektumot letre kell hozni ö Az objektum start() metü dusa val indıtjuk a vegrehajta si sza lat ö A sza l programja az objektum run() metü dusa ban van
class Hello { public static void main(String args[]){ Thread t = new Thread(); t.start(); } }
ö Ha t ez meg semmi kulonoset sem csina l, mert ures a run()
2 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Pelda class Hello { public static void main(String args[]){ (new Thread()).start(); } }
ö Ha t ez meg semmi kulonoset sem csina l, mert ures a run()
Pelda a run() feluldefinia la sa ra class Hello { public static void main(String args[]){ (new MyThread()).start(); } } class MyThread extends Thread { public void run(){ while(true) System.out.println("Hi!"); } }
Az elindıta s
Pelda a run() feluldefinia la sa ra class Hello { public static void main(String args[]){ (new Thread(){ public void run(){ while(true) System.out.println("Hi!"); } }).start(); } }
ö Nem eleg letrehozni egy Thread objektumot í A Thread objektum nem a vegrehajta si sza l í Csak egy eszkoz, aminek segıtsegevel kulonboz˝ dolgokat csina lhatunk egy vegrehajta si sza llal
ö Meg kell hıvni a start() metü dusa t ö Ez automatikusan elindıtja a run() metü dust ö Ezt a run()-t kell feluldefinia lni, megadni a sza l programja t
Illusztra ciü Object A
Object myThread (extends Thread)
Java tutorial Copyright á 2000-2001, Kozsik Tama s
public void m(){ ... Thread t = new MyThread(); t.start(); ... }
public MyThread() {...} public void start() {...} public void run() {...}
3 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Illusztra ciü Object myThread (extends Thread)
Object A
Java tutorial Copyright á 2000-2001, Kozsik Tama s
public void m(){ ... Thread t = new MyThread(); t.start(); ... }
Illusztra ciü Object myThread (extends Thread)
Object A
public void m(){ ... Thread t = new MyThread(); t.start(); ... }
public MyThread() {...} public void start() {...} public void run() {...}
public void m(){ ... Thread t = new MyThread(); t.start(); ... }
Object myThread (extends Thread)
public MyThread() {...} public void start() {...} public void run() {...}
public void start() {...} public void run() {...}
Illusztra ciü Object myThread (extends Thread)
Object A
public void m(){ ... Thread t = new MyThread(); t.start(); ... }
Illusztra ciü Object A
public MyThread() {...}
public MyThread() {...} public void start() {...} public void run() {...}
Illusztra ciü Object A
public void m(){ ... Thread t = new MyThread(); t.start(); ... }
Object myThread (extends Thread)
public MyThread() {...} public void start() {...} public void run() {...}
4 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Illusztra ciü Object myThread (extends Thread)
Object A
public void m(){ ... Thread t = new MyThread(); t.start(); ... }
public MyThread() {...} public void start() {...} public void run() {...}
Illusztra ciü Object myThread (extends Thread)
Object A
public void m(){ ... Thread t = new MyThread(); t.start(); ... }
public MyThread() {...} public void start() {...} public void run() {...}
Kerdes Java tutorial Copyright á 2000-2001, Kozsik Tama s
class Hello { public static void main(String args[]){ (new Thread()).start(); } }
ö Ha ny sza lon fut ez a program? Ha ny vegrehajta si sza l van?
Mit csina l ez a program? class Hello { public static void main(String args[]){ (new MyThread()).start(); while(true) System.out.println("Bye"); } } class MyThread extends Thread { public void run(){ while(true) System.out.println("Hi!"); } }
Feladat ö Prü ba ljuk ki, hogy mit csina l az el˝ z˝ program, de... ö ... legyen ha rom sza l í hozzunk letre ket pelda nyt a MyThread oszta lybü l í inicializa ljuk a ket pelda nyt kulonboz˝ stringekkel í ezeket a stringeket kell kiırniuk
5 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Mit kene csina lnia? ö Definia latlan ö U temezest˝ l fugg ö A nyelv definıciü ja nem tesz megkotest az utemezesre ö Kulonboz˝ platformokon / virtua lis gepeken kulonboz˝ keppen múkodhet ö A virtua lis gep meghata roz(hat)ja az utemezesi strategia t ö De azon belul is sok lehet˝ seg van ö Sok mindent˝ l fugg (pl. h˝ merseklett˝ l)
Pa rtatlansa g (fairness) ö Ha azt akarjuk, hogy minden sza l ”egyszerreÜ, ”pa rhuzamosanÜ fusson ö Ha egy sza l ma r ”eleg sokatÜ dolgozott, adjon lehet˝ seget ma s sza laknak is yield()
ö Ezen metü dus meghıva sa val lehet lemondani a vezerlesr˝ l ö A Thread oszta ly statikus metü dusa
U temezes kulonboz˝ platformokon ö Solaris alatt: egy sza l addig fut, amıg csak lehet (hatekonyabb) ö NT alatt: id˝ oszta sos utemezes (igazsa gosabb) ö O sszefoglalva: ırjunk olyan programokat, amelyek múkodese nem erzekeny az utemezesre
Mit csina l ez a program? class Hello { public static void main(String args[]){ (new MyThread()).start(); while(true){ System.out.println("Bye"); Thread.yield(); } } } ...
Feladat ö Irjuk be a yield()-eket a sza lainkba!
Java tutorial Copyright á 2000-2001, Kozsik Tama s
6 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
A ma sik „t... ö Java-ban egyszeres orokl˝ des ö Vegrehajta si sza lna l lesza rmaztata s a Thread oszta lybü l í ”elhaszna ljaÜ azt az egy lehet˝ seget
ö Megolda s: ne kelljen lesza rmaztatni ö Megvalü sıtjuk a Runnable interfeszt, ami el˝ ırja a run() metü dust ö Egy Thread objektum letrehoza sa na l a konstruktornak a tadunk egy futtathatü objektumot
Pelda a run() megada sa ra class Hello { public static void main(String args[]){ (new MyThread()).start(); } } class MyThread extends Thread { public void run(){ while(true) System.out.println("Hi!"); } }
Tipikus pelda
Pelda a run() megada sa ra class Hello { public static void main(String args[]){ (new Thread(new MyRunnable())).start(); } } class MyRunnable implements Runnable { public void run(){ while(true) System.out.println("Hi!"); } }
class MyApplet extends Applet implements Runnable { public void run(){ // animacio megjelenıtese } public void start(){ (new Thread(this)).start(); } ... }
Eletciklus IO rendelkezesre a ll Letrejott start()
Java tutorial
felebredes v. interrupt()
Futtathatü notify() yield()
Copyright á 2000-2001, Kozsik Tama s
JVM
Blokkolt wait() Futü
Veget ert
sleep() blokkolü IO
run() elfogy
7 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Eletciklus IO rendelkezesre a ll
import java.util.*; import java.io.*; class SleepDemo extends Thread {
Letrejott start() Futtathatü notify() yield()
JVM
resume() Blokkolt
suspend() wait() Futü
stop() Veget ert
public void run(){ while(true){ try { sleep(1000); } catch (InterruptedException ie){} System.out.println(new Date()); } }
felebredes v. interrupt()
public static void main(String[] args) { (new SleepDemo()).start(); while(true){ System.err.println(); } }
sleep() blokkolü IO
run() elfogy }
import java.util.*; import java.io.*; class BlokkoloDemo extends Thread { public void run(){ while(true){ try { System.in.read(); } catch (IOException ie){} System.out.println(new Date()); } } public static void main(String[] args) { (new BlokkoloDemo()).start(); while(true){ System.err.println(); } }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
}
Feladat ö A mez˝ n (ami a keperny˝ megfelel˝ je) egy ny„l es egy rü ka bü kla szik. A nyulat mi ira nyıtjuk a szabva nyos bemenetr˝ l az 'q', 'w', 'e', 'a', 's', 'd', 'y', 'x' es 'c' billentyúk segıtsegevel. A rü ka a ny„l fele igyekszik. Az a llatok a 8 veluk szomszedos mez˝ re lephetnek a t egy lepesben. A rü ka kb. ketszer olyan gyakran lep, mint a ny„l, viszont minden ira nyva ltoztata s el˝ tt meg kell a llnia.
Sza l lea llıta sa ö A stop() metü dus nem javasolt. ö Bızzuk ra a sza lra, hogy mikor akar mega llni. ö Ha a run() egy ciklus, akkor szabjunk neki feltetelt. í Gyakran egy sleep() is van a ciklusban. í A feltetel egy flag-et figyelhet, amit kıvulr˝ l a tbillenthetunk.
ö Feladat: a llıtsuk le a nyuszit, ha megfogta a rü ka!
8 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Pelda class MyApplet extends Applet implements Runnable { private boolean fut = false; public void start(){...} public void stop(){...} public void run(){...} ... }
public void start(){ fut = true; (new Thread(this)).start(); } public void stop(){ fut = false; } public void run(){ while(fut){ ... // animacio egy lepese try{ sleep(100); } catch(InterruptedExeption e){...} } }
Az els˝ problema: interferencia ö Ket vagy tobb sza l, noha kulon-kulon jü k, egyutt megis butasa got csina lnak: a || b = ab V ba
Java tutorial Copyright á 2000-2001, Kozsik Tama s
í felulırja k egyma s eredmenyeit í inkonzisztencia t okoznak
ö Pelda ul ket sza l ugyanazon az adaton dolgozik egyidejúleg
class Szamla { int egyenleg; public void ratesz(int ¨sszeg){ int ujEgyenleg; ujEgyenleg = egyenleg+¨sszeg; egyenleg = ujEgyenleg; } ... }
Interferencia ellen: szinkroniza ciü Az adatokhoz valü hozza feres szerializa la sa Kolcsonos kiza ra s Kritikus szakaszok vedelme ö Szemafor - mint vonatokna l í P es V múvelet í veszelyes programoza s, rossz min˝ segú kü d
ö Monitor í adatok + múveletek kolcsonos kiza ra ssal í jü l illeszkedik az objektum-elvú szemlelethez
Pelda: ”thread-safeÜ sza mla class Szamla { private int egyenleg; public synchronized void ratesz(int ¨sszeg){ int ujEgyenleg; ujEgyenleg = egyenleg+¨sszeg; egyenleg = ujEgyenleg; } ... }
ö Irü -olvasü í J-ban nincs olyan nyelvi elem, mint pl. Ada protected
9 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
A synchronized kulcsszü
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö Metü dusok ele ırhatjuk (de pl. interfeszekben nem!) ö Kolcsonos kiza ra s arra a metü dusra, s˝ t... ö Kulcs (lock) + va rakoza si sor í A kulcs aze az objektume, amelyike a metü dus í Ugyanaz a kulcs az osszes szinkroniza lt metü dusa hoz 1 Miel˝ tt egy sza l belephetne egy szinkroniza lt metü dusba, meg kell szereznie a kulcsot 2 Va r ra a va rakoza si sorban 3 Kilepeskor visszaadja a kulcsot
ö A nyulas-rü ka s feladatban hol van szukseg szinkroniza ciü ra? Irjuk bele!
class Szamla { private int egyenleg; public synchronized void ratesz(int ¨sszeg){ int ujEgyenleg; ujEgyenleg = egyenleg+¨sszeg; egyenleg = ujEgyenleg; } public synchronized void kivesz(int ¨sszeg) throws SzamlaTullepesException { if( egyenleg < ¨sszeg ) throw new SzamlaTullepesException(); else egyenleg -= ¨sszeg; } ... }
Szinkroniza lt blokkok (2) ö Sokszor „gy haszna ljuk, hogy a monitor szemleletet megtorjuk ö Nem az adat múveleteire biztosıtjuk a kolcsonos kiza ra st, hanem az adathoz hozza ferni igyekv˝ kü dba tesszuk ö A kritikus szakasz utasıta shoz hasonlıt ö Letjogosultsa g: ha nem egy objektumban vannak azok az adatok, amelyekhez szerializa lt hozza ferest akarunk garanta lni í Er˝ forra sok kezelese, tranzakciü k í Kes˝ bb la tunk pelda t...
Szinkroniza lt blokkok ö A synchronized kulcsszü vedhet blokk utasıta st is ö Ilyenkor meg kell adni, hogy melyik objektum kulcsa n szinkroniza ljon synchronized(obj){...}
ö Metü dus szinkroniza ciü ja val egyenertekú public void ratesz(int ¨sszeg){ synchronized(this){ ... } }
ö Ha a sza mla objektum ra tesz metü dusa nem szinkr. ... synchronized(szamla){ szamla.ratesz(100); } ...
Statikus szinkroniza lt metü dusok class A { static synchronized void m(...){...} }
ö Milyen objektum kulcsa n szinkroniza lunk? ö O nelemzes: az oszta lyok futa si idejú reprezenta ciü ja a virtua lis gepben egy Class oszta ly„ objektum - ezen ö Kerdes: ezek szerint futhatnak egyid˝ ben szinkroniza lt statikus es pelda nymetü dusok?
10 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Amikor nem kell szinkroniza lni... ö Atomi múveletek Java-ban: ertekada s volatile va ltozü knak
Java tutorial
í a volatile egy mü dosıtü szü í egyesek szerint meg ez sem kell primitıv tıpus„ va ltozü k eseten, kiveve a long es a double va ltozü kat
ö Ha a jobboldalon nem szerepel a va ltozü ö Ha ma r tobb va ltozü osszefugg (tıpusinvaria ns), akkor szerializa ljuk a hozza ferest synchronized-dal ö Feladat: ez alapja n a nyula szatbü l kivehet˝ egy pa r szinkroniza la s...
Copyright á 2000-2001, Kozsik Tama s
wait - notify ö Szigna lokra hasonlıt ö Egy feltetel teljesuleseig blokkolhatja maga t egy sza l ö A feltetel (potencia lis) bekovetkezeset jelezheti egy ma sik sza l ö Alapfeladat: termel˝ - fogyasztü (korla tos) bufferen keresztul kommunika lnak
Termel˝ -fogyasztü fogyasztü
termel˝ buffer termel() fogyaszt()
í egy termel˝ , egy fogyasztü í tobb termel˝ , tobb fogyasztü
A termel˝ sza l definıciü ja public class Termel˝ extends Thread { Buffer buffer; public Termel˝( Buffer buffer ){ this.buffer = buffer; } public void run(){ while(true){ char ch = (char) System.in.read(); buffer.termel(new Character(ch)); } } }
A termel˝ sza l definıciü ja public class Termel˝ extends Thread { Buffer buffer; public Termel˝( Buffer buffer ){ this.buffer = buffer; } public void run(){ while(true){ try{ char ch = (char) System.in.read(); buffer.termel(new Character(ch)); } catch ( IOException e ){} } } }
11 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Korla tlan buffer, egy fogyasztü
Korla tlan buffer, egy fogyasztü
public class Buffer extends Sor { public synchronized Object fogyaszt(){ if( űres() ) wait(); return kivesz(); } public synchronized void termel(Object o){ betesz(o); notify(); } }
public class Buffer extends Sor { public synchronized Object fogyaszt(){ if( űres() ) try{ wait(); } catch(InterruptedException e){} return kivesz(); } public synchronized void termel(Object o){ betesz(o); notify(); } }
Korla tlan buffer, egy fogyasztü public class Buffer extends Sor { public synchronized Object fogyaszt(){ if( űres() ) try{ wait(); } catch(InterruptedException e){return null;} return kivesz(); } public synchronized void termel(Object o){ betesz(o); notify(); } }
Múkodes ö Minden objektumhoz tartozik a sima kulcshoz tartozü va rakoza si soron kıvul egy ma sik, az „n. wait-va rakoza si sor ö A wait() hata sa ra a sza l bekerul ebbe ö A notify() hata sa ra az egyik va rakozü kikerul bel˝ le ö A wait() es notify() hıva sok csak olyan kü dreszben szerepelhetnek, amelyek ugyanazon az objektumon szinkroniza ltak synchronized(obj){ ... obj.wait(); ... }
Java tutorial Copyright á 2000-2001, Kozsik Tama s
ö A sza l megszerzi az objektum kulcsa t, ehhez, ha kell, sorban a ll egy ideig (synchronized) ö A wait() hata sa ra elengedi a kulcsot, es bekerul a wait-va rakoza si sorba ö Egy ma sik sza l megkaparinthatja a kulcsot (kezd˝ dik a synchronized) ö A notify() metü dussal felebreszthet egy wait-es alvü t, aki bekerul a kulcsos va rakoza si sorba ö A synchronized vegen elengedi a kulcsot ö A felebredt alvü nak (is) lehet˝ sege van megszerezni a kulcssot es tova bbmenni ö A synchronized blokkja vegen ˝ is elengedi a kulcsot
12 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Korla tlan buffer, tobb fogyasztü public class Buffer extends Sor { public synchronized Object fogyaszt(){ while( űres() ) try{ wait(); } catch(InterruptedException e){} return kivesz(); } public synchronized void termel(Object o){ betesz(o); Nincs szukseg notifyAll(); busy waiting-re } }
Feladatok ö Fejezzuk be a termel˝ -fogyasztü feladatot a fogyasztü implementa la sa val ö Hogyan valü sıtana nk meg a szemaforokat Java-ban? ö Es az ırü -olvasü problema t? ö Javıtsunk a nyulas-rü ka s programunkon! A keperny˝ re akkor kell kirajzolni a mez˝ t, ha valami va ltoza s tortent...
Sza lak kommunika ciü ja Java tutorial Copyright á 2000-2001, Kozsik Tama s
Kozos memü ria n keresztul ö A kommunika ciü ra haszna lt objektumokra referencia kat lehet a tadni, eljuttatni a sza lakba í pl. a rü ka a ny„lrü l ıgy szerez informa ciü t
ö Vegletes esetben maga t a futtathatü objektumot is megoszthatjuk: class A implements Runnable { ... // adatok, mᑺveletekkel public void run(){ ... } } A a = new A(); Thread t1 = new Thread(a); Thread t2 = new Thread(a);
ö Aszinkron leginka bb ö Szinkron kommunika ciü (pl. Ada randev„) helyett csak wait-notify szinkroniza ciü van ö Megosztott es elosztott szemlelet egyara nt ö Megosztott: kozos memü ria n keresztul ö Elosztott: uzenetkuldes csatorna kkal (Piped csatorna k) ö Termel˝ -fogyasztü
Piped csatornaoszta lyok ö PipedInputStream, PipedOutputStream PipedReader, PipedWriter ö Egy bemenetit es egy kimenetit osszekapcsolunk ö A cs˝ egyik vegere az egyik sza l ır, a cs˝ ma sik veger˝ l a ma sik sza l olvassa ö Vigya zat: az olvasa s blokkolü múvelet! í available(), ready() - ba r ez utü bbival rosszak a tapasztalatok
13 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
PipedReader r = new PipedReader(); PipedWriter w = new PipedWriter(r); (new Termel˝Szal(w)).start(); (new FogyasztoSzal(w)).start(); public class Termel˝Szal extends Thread { ... Writer w; public Termel˝Szal( Writer w ){ this.w = w; } public void run(){ while(fut){ char adat = ... // termel w.write(adat); w.flush(); } } }
Holtpont (deadlock)
Java tutorial Copyright á 2000-2001, Kozsik Tama s
Mit lehet tenni?
ö Neha ny folyamat veglegesen blokkolü dik, arra va rnak, hogy egy ma sik, szinten a holtpontos halmazban lev˝ folyamat csina ljon valamit ö Az interferencia tokeletes kikuszobolese :-) ö T„l sok a szinkroniza ciü ö Gyakran er˝ forra s-kezeles vagy tranzakciü k kozben ö Pelda: etkez˝ filozü fusok (dining philosophers)
ö Nincs univerza lis megolda s, a programozü dolga a feladathoz illeszked˝ megolda s kidolgoza sa ö Detekta la s, megszuntetes (pl. timeout), el˝ rejelzes, megel˝ zes ö Megel˝ zes: er˝ forra sok sorrendbe a llıta sa, szimmetria megtorese, kozponti ira nyıta s, veletlenszerú va rakoztata s, stb.
class A { synchronized synchronized } class B { synchronized synchronized }
class A { void m1(){...} void m2(B b){... b.m1() ...} } class B { void m1(){...} void m2(A a){... a.m1() ...} }
void m1(){...} void m2(B b){... b.m1() ...}
void m1(){...} void m2(A a){... a.m1() ...}
A a = new A(); B b = new B();
Egyik sza lban Ma sik sza lban
a.m2(b); b.m2(a);
í pl. a filozü fusok...
A a = new A(); B b = new B(); Object o = new Object();
Egyik sza lban Ma sik sza lban
synchronized(o) {a.m2(b);} synchronized(o) {b.m2(a);}
14 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Kieheztetes (starvation, livelock) ö A rendszer nem a ll le, a folyamatok mennek, de van olyan koztuk, amelyik nem tudja azt csina lni, amit szeretne ö Pl. tobb fogyasztü kozul az egyik el van hanyagolva. Vagy az egyik filozü fus sosem eszik. ö Amikor a folyamatra kerul a vezerles,˝ kezd futni, de akkor epp nem teljesul a tova bbhalada si feltetel ö Konnyen bekovetkezhet wait-notify mellett ö Kivedes/megel˝ zes meg nehezebb, mint a holtpont eseten
Priorita s (folyt.) ö Ha egy sza l futtathatü va va lik (pl. felebred vagy elindul), es egy alacsonyabb priorita s„ fut eppen, akkor az a tadja a vezerlest ö Priorita si szint lekerdezese es bea llıta sa: int getPriority() void setPriority(int priority) ö Sza l letrehoza sakor a letrehozott orokli a letrehozü priorita sa t, ha ma st nem adunk meg ö A ltala nos strategia: sokat dolgozü sza lnak kisebb priorita st erdemes adni
Demonok ö Sza lak lehetnek demonok ö Ha a nem demon sza lak veget ernek, akkor a program is veget er, es a demon sza lak a ha tterben futnak tova bb ö Az elindıta s, azaz a start() el˝ tt be kell a llıtani boolean isDaemon() void setDaemon(boolean on)
Priorita s ö A sza lakhoz priorita s van rendelve ö Priorita si szintek: 1 (MIN_PRIORITY) es 10 (MAX_PRIORITY) kozott í Rendszerszintú sza lak priorita sa 11
ö A Java a priorita si szintek kozott preemptıv utemezest ker: a magasabb priorita s„ futhat í Sajnos a JVM-nek nem kotelez˝ ezt betartania í Ne ezen m„ljon a programunk helyessege
ö Egy szinten belul definia latlan í SUN ”GreenÜ sza lak: kooperatıv í SUN ”NatıvÜ sza lak: preemptıv
Sza lcsoportok ö A sza lak sza lcsoportokba sorolhatü k í Sza l letrehoza sakor
ö java.lang.ThreadGroup ö Logikailag osszetartozü sza lak lehetnek egy csoportban ö A csoport maxima lis priorita sa bea llıthatü , a csoportbeli sza lake ezt nem fogja meghaladni ö A sza lak lekerdezhetnek informa ciü kat a saja t csoportjukrü l ö A sza lcsoportok hierarchia ba szervezhet˝ k
Meg neha ny múvelet ö join() A futü sza l blokkolü dik, amıg az a sza l veget nem er, amelyiknek a join-ja t meghıvta í id˝ korla t adhatü meg
ö interrupt() Egy blokkolt a llapot„ sza lat (sleep, wait) felebreszt. A felebredt sza lban a blokkolü utasıta s helyen InterruptedException lep fel ö stop(), suspend() es resume() Elavultak, mert veszelyesek (helyesseg, holtpont)
15 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com