Filehost.ro - gazduire fisiere
Informatica
Programare - Software - Web Design
Nou pe simpatie:
Profil Alesiandra
Femeie
24 ani
Cluj
cauta Barbat
28 - 58 ani
InformaticaInregistrareLoginPozeNu sunteti logat. Lista Forumurilor Pe Tematici
Informatica / Despre limbajele de programare /

Fire de executie

Pagini: 1  
#1
Admin
Administrator
Postari: 315
1.Fire de executie
• permit executarea simultana a mai multor parti din program
• constituie o versiune redusa a unui proces
• asemanari : ruleaza independent si simultan
• deosebiri : la crearea unui nou proces (fork) este realizata o copie exacta a procesului parinte : cod + date; la crearea unui fir de executie nu este copiat decat codul procesului parinte; toate firele de executie au deci acces la aceleasi date, datele procesului original
• utilitate : executarea unor operatii in fundal

2.Declararea, instantierea si distrugerea firelor de executie
• prin extinderea clasei Thread
• prin implementarea interfetei Runnable

2.1 Creearea firelor de executie prin extindrea clasei Thread
public class MyMain {
public static void main(String args[]) {
CntThread cntThread; //declare thread
cntThread = new CntThread(); //create thread
cntThread.start(); //start thread running
try {System.in.read();} //wait for keyboard input
catch(java.io.IOException e){}
cntThread.stop(); //stop thread
}
}
class CntThread extends Thread {
public void run() {
int ix = 0;
while (true) {
System.out.println("running, ix = " + ix++);
//write count to screen
try {Thread.sleep(1000);} //sleep 1 second
catch(InterruptedException e){}
}
}
}

2.2 Creearea firelor de executie prin implementarea interfetei Runnable
import java.applet.* ;
import java.awt.* ;

public class TestThread extends Applet implements Runnable {
Thread mainThread ;
CntThread thread1, thread2;

public void start() {
if (mainThread == null) {
mainThread = new Thread(this);
mainThread.start();
}
}
public void run() {
thread1 = new MyThread(this, 2);
thread1.start();
thread2 = new MyThread(this, 3);
thread2.start();
}
public boolean keyDown( Event evt, int key ) {
thread1.stop();
thread2.stop();
return(true);
}
public void paint( Graphics g) {
g.drawString("Ruleaza 3 fire de executie", 10, 10);
g.drawString("Contor1 :"+thread1.counter, 10, 30);
g.drawString("Contor2 :"+thread2.counter, 10, 50);
}
}
//----------------------------------------------------------------------
class CntThread implements Runnable {
TestThread parent;
boolean loop;
Thread cntThread;
int step;
int counter;

public CntThread(TestThread p, int s) {
parent = p; //salvez instanta parinte
step = s;
}

public void start() {
if (cntThread == null) {
counter = 0;
cntThread = new Thread(this); //creez firul de executie pentru numarare
cntThread.start(); //lanseaza firul de executie
}
}
public void run() {
loop = true;
while (loop) {
counter += step;
parent.repaint();
try {Thread.sleep(1000);} //pauza de 1 sec
catch (InterruptedException e) {}
}
}
public void stop() {
loop = false;
}
}

2.3 Instantierea unui fir de executie : NEW
• mainThread = new Thread(this) ;
• myThread = new MyThreadClass();

2.4 Distrugerea unui fir de executie : STOP, DESTROY
myThread = new MyThreadClass();
myThread.start();
myThread.stop();
myThread = null;
Nu este necesara distrugerea explicita a unui fir de executie. Sistemul Java de colectare a gunoiului se ocupa de acest lucru. El poate fi fortat sa dezaloce resuresele alocate unui thread prin atribuirea cu null a variabilei care referea instanta firului de executie

3.Metode pentru firele de executie
• init() - apelata la prima lansare a unui fir de executie, locul unde se scrie codul de initializare
• start()- apelata la fiecare lansare, dupa operatiile de initializare
• stop()- apelata la terminarea firului de executie, contine codul de terminare a unui fir de executie
• run()- apelata de metoda start, contine corpul firului de executie

4.Denumirea firelor de executie
• Thread myThread = new Thread(this.”Nume fir”)
• myThread.getName()
• myThread.setName()

5.Sincronizarea firelor de executie
Un obiect sau o metoda pot fi accesate de mai multe fire de executie. Nu exista insa nici o garantie privind firul de executie care va avea acces la un obiect la un moment dat, ceea ce poate conduce la rezultate imprevizibile. Pentru a evita acest lucru se foloseste cuvantul cheie synchronized, care blocheaza un obiect pe perioada executarii unui bloc de cod.
public void incIndex() {
synchronized(index) {
//bloc de cod sincronizat, ob. index este blocat
index++;
System.out.println(“index = “ + index);
}
}
Cuvantul cheie synchronized poate fi folosit si ca modificator al unei metode, asigurandu-se utilizarea ei de catre un singur fir de executie la un moment dat.
public void synchronized incIndex() {
index++;
System.out.println(“index = “ + index);
}


 
   
Pagini: 1  
Mergi la