Sunteți pe pagina 1din 7

MINISTERUL EDUCAȚIEI, CULTURII ȘI CERCETĂRII

AL REPUBLICII MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică şi Microelectronică
Departamentul Informatică şi Ingineria Sistemelor

Sultan Anna, RM-201

Raport
pentru lucrarea de laborator Nr.3

la cursul de “Programare concurentă și distribuită”

Verificat:
Rotaru Lilia, lector universitar,.
Departamentul Informatică şi IS,
Facultatea FCIM, UTM

Chișinău – 2022
Cuprins
1. Tema lucrării..................................................................................................................3

2. Scopul lucrării:..............................................................................................................3

3. Etapele de realizare:......................................................................................................3

Condiția problemei............................................................................................................3

Codul programului............................................................................................................3

Imprimarea de pe ecran a execuției programului..........................................................6

Concluzii:............................................................................................................................7

2
Lucrarea de laborator nr. 3

1. Tema lucrării: Sincronizarea firelor de execuție utilizînd metodele clasei Thread.

2. Scopul lucrării:
 Însuşirea modalităţilor de creare a thread-urilor în Java;

 Însuşirea metodelor de creare a unui grup de thread-uri

3. Etapele de realizare:
1) Utilizarea clasei Thread pentru crearea unei clase noi;
2) Utilizarea interfeţei Runnable pentru crearea şi lansarea thread-urilor;
3) Utilizarea clasei ThreadGroup pentru crearea grupurilor de thread-uri;
4) Setarea priorităţilor thread – urilor utilizînd metoda setPriority(….);
5) Enumerarea thread-urilor şi a priorităţilorlor utilizînd metoda enumerate();
6) Utilizare metodei list();
7) Prezentarea lucrării.

Condiția problemei
Varianta 6

Scrieţi un program care creează patru fire de execuţie. Toate firele vor citi datele din
diapazonul indicat în sarcină. Perechile de thread-uri 1-2 și 3-4 au sarcini commune. Primul fir
Th1 va afişa: Condiţia 1 din tabelul 3, al doilea fir Th2 va afișa Condiția 2 din tabelul 3,al treilea
fir Th3 va afișa Condiția 3 din tabelul 3, al patrulea fir Th4 va afișa Condiția 4 din tabelul 3.

După terminarea tuturor firelor de execuţie thread-ul Th2 va afişa Numele studentului
care a efectuat lucrarea dată de laborator, Th4 va afișa grupa, Th1 va afișa Prenumele
studentului, Th3 va afișa denumirea disciplinii. Literele textului vor apărea pe ecran cu un
interval de 100 milisecunde.

Codul programului
public class Main {
static int size = 160;
static int[] b = new int[size];
static Straight first = new Straight();
3
static Reverse second = new Reverse();
static ReverseInterval third = new ReverseInterval();
static StraightInterval fourth = new StraightInterval();
static int pairone = 0;
static int pairtwo = 0;

static class Straight extends Thread {


int result = 0;
@Override
public void run(){
System.out.println("Starting Thread 1");
for (int i = 19; i<= 113; i+=8){
try{
Thread.sleep(100);
}
catch (InterruptedException e){
}
pairone = b[i] * b[i+2];
pairtwo = b[i+4] * b[i+6];
result = pairone + pairtwo;
System.out.println ("Current value for Thread 1 is: " +
pairone + " + " + pairtwo + " = " + result);
}
while(fourth.isAlive()){
first.interrupt();
}
String s = "1:Anna";
for (int ii = 0; ii < s.length(); ii++) {
System.out.print(s.charAt(ii));
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
}
}
System.out.println();
}
}

static class Reverse extends Thread {


int result = 0;
@Override
public void run(){
System.out.println("Starting Thread 2");
for (int i = 105; i>= 13; i-=8){
try{
Thread.sleep(100);
}
catch (InterruptedException e){

}
pairone = b[i] * b[i-2];
pairtwo = b[i-4] * b[i-6];
result = pairone + pairtwo;
System.out.println ("Current value for Thread 2 is: " +
pairone + " + " + pairtwo + " = " + result);
}
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
}
String s = "2:Sultan";
for (int ii = 0; ii < s.length(); ii++) {
System.out.print(s.charAt(ii));

4
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
}
}
System.out.println();
}
}

public static class StraightInterval extends Thread {


@Override
public void run(){
System.out.println("Starting Thread 4 ");
try{
Thread.sleep(500);
} catch (InterruptedException e) {
}
System.out.print("Thread 4:");
for (int i = 654; i<= 1278; i++){
System.out.print(i + " ");
}
System.out.println(" ");
while(second.isAlive()){
Thread.yield();
}
String s = "4:RM-201";
for (int ii = 0; ii < s.length(); ii++) {
System.out.print(s.charAt(ii));
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
}
}
System.out.println();
}

public static class ReverseInterval extends Thread {


@Override
public void run(){
System.out.println("Starting Thread 3 ");
System.out.print("Thread 3:");
for (int i = 908; i>= 123; i--){
System.out.print(i + " ");
}
System.out.println(" ");
while(first.isAlive()){
third.interrupt();
}
String s = "3:Programarea Concurenta si Distributiva";
for (int ii = 0; ii < s.length(); ii++) {
System.out.print(s.charAt(ii));
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
}
}
System.out.println();
}
}

public static void main(String[] args) {

5
System.out.println("Printing Array: ");
for (int i = 0; i< 150; i++) {
b[i] = (int) Math.round((Math.random() * 100) + 15);
System.out.print (b[i] + " ");
if (i == 50){
System.out.println (b[i] + " ");
}
if (i == 99)
System.out.println(b[i] + " ");
if (i == 149)
System.out.println();
}
first.start();
second.start();
fourth.start();
third.start();
}
}

Imprimarea de pe ecran a execuției programului

6
Concluzii:
În rezultatul realizării lucrarii de laborator au fost obținute abilități de lucru cu limbaj de
programare java. Noi am aflat cum putem crea Thread-uri și grupuri de thread-uri. Am utilizat
clasa Thread pentru crearea unei clase noi. Am sincronizat firele de execuție utilizînd metodele
clasei Thread. Am însuşit modalităţile de creare a thread-urilor în Java și am însuşit metodele de
creare a unui grup de thread-uri. Și am rezolvat niște calculele matematice prin thread-uri.

S-ar putea să vă placă și