Fire de execu]ie
· &nb 838p157i sp; permit executarea simultan\ a mai multor p\r]i din program
· &nb 838p157i sp; constituie o versiune redus\ a unui proces
· &nb 838p157i sp; asem\n\ri : ruleaz\ independent [i simultan
· &nb 838p157i sp; deosebiri : la crearea unui nou proces (fork) este realizat\ o copie exact\ a procesului p\rinte : cod + date; la crearea unui fir de execu]ie nu este copiat decāt codul procesului p\rinte; toate firele de execu]ie au deci acces la acelea[i date, datele procesului original
· &nb 838p157i sp; utilitate : executarea unor opera]ii īn fundal
Declararea, instan]ierea [i distrugerea firelor de execu]ie
n &nb 838p157i sp; prin extinderea clasei Thread
n &nb 838p157i sp; prin implementarea interfe]ei Runnable
2.1 Creearea firelor de execu]ie prin extindrea clasei Thread
public class MyMain //wait for keyboard input
catch(java.io.IOException e)
cntThread.stop(); //stop thread
}
class CntThread extends Thread //sleep 1 second
catch(InterruptedException e)
}
}
Creearea firelor de execu]ie prin implementarea interfe]ei Runnable
import java.applet.* ;
import java.awt.* ;
public class TestThread extends Applet implements Runnable
}
public void run()
public boolean keyDown( Event evt, int key )
public void paint( Graphics g)
class CntThread implements Runnable
public void start()
}
public void run() //pauza de 1 sec
catch (InterruptedException e)
}
}
public void stop()
2.3 Instan]ierea unui fir de execu]ie : NEW
· &nb 838p157i sp; mainThread = new Thread(this) ;
· &nb 838p157i sp; myThread = new MyThreadClass();
2.4 Distrugerea unui fir de execu]ie : STOP, DESTROY
myThread = new MyThreadClass();
myThread.start();
myThread.stop();
myThread = null;
Nu este necesar\ distrugerea explicit\ a unui fir de execu]ie. Sistemul Java de colectare a gunoiului se ocup\ de acest lucru. El poate fi for]at s\ dezaloce resuresele alocate unui thread prin atribuirea cu null a variabilei care referea instan]a firului de execu]ie
3. Metode pentru firele de execu]ie
· &nb 838p157i sp; init() - apelat\ la prima lansare a unui fir de execu]ie, locul unde se scrie codul de ini]ializare
· &nb 838p157i sp; start()- apelat\ la fiecare lansare, dup\ opera]iile de ini]ializare
· &nb 838p157i sp; stop()- apelat\ la terminarea firului de execu]ie, con]ine codul de terminare a unui fir de execu]ie
· &nb 838p157i sp; run()- apelat\ de metoda start, con]ine corpul firului de execu]ie
Denumirea firelor de execu]ie
· &nb 838p157i sp; Thread myThread = new Thread(this."Nume fir")
· &nb 838p157i sp; myThread.getName()
· &nb 838p157i sp; myThread.setName()
3. Sincronizarea firelor de execu]ie
Un obiect sau o metod\ pot fi accesate de mai multe fire de execu]ie. Nu exist\ īns\ nici o garan]ie privind firul de execu]ie care va avea acces la un obiect la un moment dat, ceea ce poate conduce la rezultate imprevizibile. Pentru a evita acest lucru se folose[te cuvāntul cheie synchronized, care blocheaz\ un obiect pe perioada execut\rii unui bloc de cod.
public void incIndex()
Cuvāntul cheie synchronized poate fi folosit [i ca modificator al unei metode, asigurāndu-se utilizarea ei de c\tre un singur fir de execu]ie la un moment dat.
public void synchronized incIndex()
|