Ingineria Sistemelor de Programare

Documente similare
Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Ingineria Sistemelor de Programare

Curs 10

Top

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Microsoft Word - 2 ES RO.doc

9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atâ

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

PPSD

Declararea variabilelor

Paradigme de Programare

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Proiectarea Sistemelor Software Complexe

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

PROGRAMARE ORIENTATA PE OBIECTE

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

Paradigme de programare

Ingineria Sistemelor de Programare

Laborator 3

Lucrarea 10

Microsoft Word - lab4.doc

Microsoft Word - CarteC.doc

Microsoft Word _SwRTc_Proiect_Faza1_v01.htm

Gestionarea I/E

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

Programarea şi utilizarea calculatoarelor

Procesarea de imagini folosind programarea paralela. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte l

PowerPoint Presentation

Laborator Fragments Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe fragmente ți un fragment se poate r

Lucrarea nr. 9 - Liste dublu înlănţuite Breviar teoretic În cadrul elementelor studiate anterior s-a putut observa utilitatea listelor simplu înlănuit

Programarea şi utilizarea calculatoarelor

Aggregating Data

Curs 6 Fragments Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe fragmente ți un fragment se poate reut

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Slide 1

Limbaje de Programare Curs 8 – Fisiere

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Textul si imaginile din acest document sunt licentiate Attribution-NonCommercial-NoDerivs CC BY-NC-ND Codul sursa din acest document este licentiat Pu

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Object Oriented Programming

Slide 1

PowerPoint Presentation

Managementul Resurselor Umane

-

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

PowerPoint Presentation

Tema laborator TS.NET 2019 Vom simula (partial, in scop didactic) activitatea unui service auto. Pentru aceasta vom considera urmatoarele tipuri: Clie

CASA CORPULUI DIDACTIC BRAILA PROGRAM DE FORMARE INFORMATICA SI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: TIMOFTI V. AFRODITA COLEGIUL

RZOLVARE EXERCITIU ZODII declare cursor distributie_zodie is select nume_zodie, count(*) distributie from zodiac z join utilizatori u on to_date(to_ch

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

tehnologii web

Algoritmi genetici paraleli. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte laborator. 4. Tema. 1. Ob

CURS

Cursul 13 Mulţimi Julia Fie f : C C o funcţie complexă şi fie f n = f f f iterata de ordin n a lui f. Peste tot în continuare vom presupune că f este

L7

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

Microsoft Word - O problema cu bits.doc

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo

Microsoft Word - barcan.doc

Lab6LCD

MIdland CT210 manual

Aplicaţii Integrate pentru Întreprinderi Laborator Realizarea de aplicaţii web folosind Java Servlets Scopul laboratorului îl reprezintă

Programarea şi utilizarea calculatoarelor

Paradigme de Programare

Comanda si supravegherea centralelor termice de putere

TM200 Live Tour guide Sistem audio mobil Sistemul de comunicare audio Tour guide este util in cel putin 3 situatii si vine cu avantaje clare: 1) Cand

JScm: Compilator Scheme pentru masina virtuala Java Constantin Stanciu Zoran Constantinescu Universitatea "Poli

Cuprins

Tablouri (continuare)

Universitatea Politehnica din București Facultatea de Electronică, Telecomunicații și Tehnologia Informației Metode de extindere a duratei de viaţă a

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Limbaje de Programare Curs 5 – Siruri de caractere

Microsoft PowerPoint - 8_QA_Instrumente [Compatibility Mode]

Limbaje de programare. Laborator Clasa, obiect, abstractizare Clasa : descrie tipul obiectelor dintr-un program; poate fi asociată cu un şablon

Microsoft Word - 20 L Balasa.doc

Modul Modbus ASCII SISTEME DE COMUNICATIE CURS 5 - Constantinescu Catalin Atunci cand se foloseste modul MODBUS ASCII fiecare octet din mesaj

Slide 1

MANUAL ULTRA ORIENTEERING CLASAMENTE SOFTWARE VERSION 1.0

PowerPoint Presentation

proiectarea bazelor de date

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

Laborator5_SQL_an2

PowerPoint-Präsentation

2

Transcriere:

Ingineria Sistemelor de Programare

Cuprins Fire de executie Concurrency API (java.util.concurrent)

Executia concurenta Concurenta prin intermediul proceselor si a firelor de executie http://www.javamex.com/tutorials/threads/how_threads_work.shtml

Executia concurenta Proces (eng. process) = Program aflat in executie in memoria calculatorului. Procesele sunt independete si nu isi pot accesa unele altora zonele de cod sau de date. Comunicarea intre procese se face prin mecanisme specifice puse la dispozitie de sistemul de operare. Fire de executie (eng. thread) = Secvente de instructiuni ce se ruleaza virtual in parallel in cadrul unui process. Firele de executie impart resursele unui proces. Comunicare intre firele de executie se face prin intermeidiul variabilelor si metodelor.

Construirea firelor de executie in Java Pasii necesari pentru contruirea unui fir de executie Extinderea clasei Thread sau implementarea interfetei Runnable Implementarea logicii firului in metoda run() Lansarea in executie a firului prin apelarea metodei start()

Construirea firelor de executie class FirstActivity implements Runnable{ @Override public void run() { int k = 0; while(k++<10){ System.out.println("Do first activity..."+k); try { TimeUnit.SECONDS.sleep(1); catch (InterruptedException e) { e.printstacktrace(); class SecondActivity extends Thread{ @Override public void run() { int k = 0; while(k++<10){ System.out.println("Do second activity..."+k); try { Thread.sleep(1000); catch (InterruptedException e) { e.printstacktrace(); public class Test { public static void main(string[] args) { FirstActivity f1 = new FirstActivity(); Thread t = new Thread(f1); t.start(); SecondActivity f2 = new SecondActivity(); f2.start();

Lucrul cu fire de executie Un program isi incheie executia cand toate firele de executie (cu exceptia celor de tip daemon isi incheie executia) Metoda recomandata pentru terminarea executiei uni fir este prin verificarea unei conditii si parasirea metodei run(). Nu se recomanda utilizarea metodet Thread.stop() Numele firelor de executie (setname(), getname()) Prioritatea firelor de executie (setpriority(), getpriority()) Programatorul nu trebuie sa isi bazeze logica programului pe prioritatea firelor Metoda Thread.sleep(milliseconds) pun un fir de executie in asteptare o perioadad definite de timp Metoda Thread.yeld() notifica planificatorul de fire ca firul current poate ceda procesorul Fire de executie de tip daemon (setdaemon())

Sincronizarea firelor utilizand metoda join() join() permite unui fir sa astepte terminarea unui alt fir Firul care apeleaza join() va fi pus in asteptare pana cand firul pentru care a fost apelat join() isi termina executia class JoinTest extends Thread { String n; Thread t; JoinTest(String n, Thread t){this.n = n;this.t=t; public void run() { System.out.println("Firul "+n+" a intrat in metoda run()"); try { if (t!=null) t.join(); System.out.println("Firul "+n+" executa operatie."); Thread.sleep(3000); System.out.println("Firul "+n+" a terminat operatia."); catch(exception e){e.printstacktrace(); public static void main(string[] args) { JoinTest w1 = new JoinTest("Proces 1",null); JoinTest w2 = new JoinTest("Proces 2",w1); w1.start(); w2.start();

Excluderea mutual Pentru implementarea excluderii mutual JVM asociaza cate un lock cu fiecare obiect si clasa Rechizitioarea lock-ului se face atunci cand un fir intra intr-un bloc sincronizat sau intr-o metoda sincronizata Eliberarea lock-ului se face la iesirea din zona sincronizata Un fir nu poate intra intr-o zona sincronizata daca un alt fir detine lock-ul corespunzator zonei sincronizate Daca un fir nu poate intra in zona sincronizata atunci acesta ese blocat (pus in asteptare) la intrarea in zona sincronizata La eliberarea lock-ului JVM va permite accesul (va debloca) in zona scrionizata a unui alt fir

Excluderea mutuala Bloc sincronizat synchronized(p){ a= p.getx(); b = p.gety(); La intrarea intr-un bloc sincronizat se rechizitioneaza lock-ul obiectului specificat in parantezele blocului. Metoda sincronizata synchronized void push(double d) { content.add(new Double(d)); notify(); La intrarea intr-o metoda sincronizata se rechizitioneaza lockul metodei din care face parte metoda. http://control.aut.utcluj.ro/hmihai/doku.php?id=java1:fire:introducere#sincronizarea_firelor

Interblocaje Interblocajul (eng. deadlock) - folosirea blocurilor sincronizatea în mod greşit poate duce la situaţii de interblocaje între firele de execuţie. Astfel de situaţii apar atunci când două fire sunt blocate, fiecare aşteptând unul după celălalt eliberarea unui monitor. http://control.aut.utcluj.ro/hmihai/doku.php?id=java1:fire:introducere#interblocaje_deadlocks

Metodele wait() si notify() Metodele wait() si notify() fac parte din clasa Object Sun folosite de firele de executie pentru Metoda wait() Poate fi apelata doar dintr-o zona sincronizata Poate fi apelata doar pentru obiectul pentru care se detine lock-ul La apelare metoda va pune in astepatre (bloca) firul appellant Dupa blocare firul appelant va elibera lock-ul pe care il detine! Metoda notify() Poate fi apelata doar dintr-o zona sincronizata Poate fi apelata doar pentru obiectul pentru care detine lock-ul La apelare metoda va trezi un fir de executie blocat ca urmare a apelarii metodei wait() http://control.aut.utcluj.ro/hmihai/doku.php?id=java1:fire:introducere#sincronizarea_firelor_utilizand_metodele_wait_notify_si_notifyall

Executors Concurrency API introduce conceptul ExecutorService - inlocuieste necesitatea de a lucra direct cu fire (sunt construite automat) - reutilizeaza firele de executie (colectie de fire reutilizabile) - permite executia asincrona de task-uri - ofera suport pentru lucrul cu task-uri de tip Runnable si Callable

Exempl Threda vs ExecutorService class JobA implements Runnable{ public void run(){ Random r = new Random(); int k = 1 + r.nextint(10); while(k-->0) { System.out.println("Tick "+k+" by Thread "+Thread.currentThread().getName()); try { TimeUnit.SECONDS.sleep(1); catch (InterruptedException e) {e.printstacktrace(); public class Main { public static void main(string[] args) { Thread t = new Thread(new JobA()); t.start(); ExecutorService executorservice = Executors.newFixedThreadPool(2); executorservice.submit(new JobA()); executorservice.shutdown(); 1 - Thread 2- Executor service Pasi lucru cu executor service: 1. Construire executor service. 2. Trimtere task catre executor service 3. Inchide executor service. 1. shutdown() vs shutdownnow()

Lucrul cu Callable \ Future class JobB implements Callable<Integer> { Executarea de task-uri utilizand interfata Callable si obinerea rezultatelor executiei in mod asincron prin intermediul interfetei Future Future.get() blocheaza indefinite Future.get(1, TimeUnit.Seconds) asteapta un timp limitat returnarea rezultatului @Override public Integer call() throws Exception { Random r = new Random(); int k = 1 + r.nextint(10); while(k-->0) { System.out.println("Tick "+k+" by Thread "+Thread.currentThread().getName()); try { TimeUnit.SECONDS.sleep(1); catch (InterruptedException e) {e.printstacktrace(); return k; Future<Integer> future = executorservice.submit(new JobB()); Integer result = null; try { result = future.get(); System.out.println("Executed job with tick count = "+result); catch (InterruptedException ExecutionException e) { e.printstacktrace();

Executia de task-uri periodice sau cu intarziere Delay intarzierea initiala cu care se executa prima data task-ul Period intervalul de timp dintre doua executii succesive ale task-ului ScheduledExecutorService scheduledexecutor = Executors.newScheduledThreadPool(1); //periodic task int delay = 3; int period = 1; scheduledexecutor.scheduleatfixedrate(new JobC(), delay, period, TimeUnit.SECONDS); //one time delayed callable task ScheduledFuture<Integer> future1 = scheduledexecutor.schedule(new JobB(), 3, TimeUnit.SECONDS); try { Integer result = future1.get(); System.out.println("Delayed executed job result: "+result); catch (InterruptedException ExecutionException e) { e.printstacktrace();