Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Hasonló dokumentumok
Szoftvertechnológia alapjai Java előadások

Programozási nyelvek és módszerek Java Thread-ek

Végrehajtási szálak - kiegészítések. Szinkronizálás, érvénytelenített metódusok helyettesítése

Concurrency in Swing

Programozási technológia 2.

Párhuzamosság. Java a párhuzamosítást több féle képpen támogatja.

VIII. Szálak és animáció

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

S ha kettészelik is: balfelöl belőle Valamivel mindig - Valamivel mindiq több marad. (Nyugat )

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Konkurens TCP Szerver

Segédanyag: Java alkalmazások gyakorlat

Java programozási nyelv 4. rész Osztályok II.

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Abstract osztályok és interface-ek. 7-dik gyakorlat

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Segédanyag: Java alkalmazások gyakorlat

Java Programozás 11. Ea: MVC modell

Szoftvertechnológia alapjai Java előadások

Magas szintű programozási nyelvek 2 Előadás jegyzet

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Pa rhuzamossa g. Java tutorial. Alkalmazasi teruletek. Cel. Pa rhuzamossa gi modellek. Ha egy processzor van...

Programozási nyelvek Java

Kölcsönös kizárás, atomicitás, szemafor.

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

7. K: JAVA alapok Konzultáció

Java és web programozás

Fejezetek az "Effective Java" c. könyvből

JAVA PROGRAMOZÁS 3.ELŐADÁS

JNDI - alapok. Java Naming and Directory Interface

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Osztályok. 4. gyakorlat

Objektumorientált programozás Java-ban

Java Programozás 3. Gy: Java GUI. Swing, AWT

Java programozási nyelv

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

és az instanceof operátor

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozási nyelvek Java

eseményvezérelt megoldások Vizuális programozás 5. előadás

Elosztott rendszerek

Programozási technológia 2.

Grafikus felhasználói felület 3.

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Stateless Session Bean


ZH mintapélda. Feladat. Felület

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Java IX. telkezelés a Java-ban

OOP: Java 8.Gy: Gyakorlás

Task-alapú párhuzamosítás C# környezetben

Java és web programozás

Programozási technológia 2.

Java IX. telkezelés a Java-ban

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

4. Gy: JAVA osztályok

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

Programozási nyelvek II.: JAVA

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozási nyelvek Java

Matematikai és Informatikai Intézet. 4. Folyamatok

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozási nyelvek Java

Kivételkezelés, naplózás. Exception handling, logging

Az operációs rendszer szerkezete, szolgáltatásai

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

BME MOGI Gépészeti informatika 4.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Java gyorstalpaló. Duma, ha kell valamiért

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

OOP: Java 4.Gy: Java osztályok

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Java programozási nyelv 5. rész Osztályok III.

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

Java felhasználói felület

I. 288.: Utcai WiFi térkép

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

Átírás:

Végrehajtási szálak Runnable, Thread

Végrehajtási szálak Java-ban A Java program az operációs rendszer egy folyamatán (process) belül fut. A folyamat adat és kód szegmensekből áll, amelyek egy virtuális címzési térben vannak elhelyezve, és különböző erőforrásokat (memória zónák, fájlok, stb.) foglalnak le (melyek a folyamat befejezésekor felszabadulnak). A szálak a folyamatok végrehajtó egységei Végrehajtási szál: utasítások sora + CPU regiszterek + megfelelő verem A szálak a folyamatokhoz hasonlóan viselkednek, ütemezhetőek, az alapvető különbség, hogy egy-egy folyamat címzési tartományán belül helyezkednek el, így bizonyos folyamaton belüli adatok több szál számára láthatóak, ezért szükséges a szálak közötti kommunikáció, a végrehajtási szálak szinkronizálása A Java program indításakor létrejön egy elsődleges szál, amely a későbbiekben további szálakat hozhat létre (és így tovább) Azok az applikációk, amelyek több végrehajtási szálon futnak párhuzamosan több feladat végrehajtására képesek

Végrehajtási szálak létrehozása származtatás a java.lang.thread osztályból public class Thread extends Object implements Runnable a Runnable interface implementálása (a run() metódust deklarálja, amely így a Thread osztálynak is központi metódusa) public interface Runnable{ public abstract void run(); A Thread osztály metódusai: start(), run(), sleep(), interrupt(), join(), getname(), setname(), destroy(), isinterrupted() Példa: try{ Thread.sleep( 1000 ) catch ( InterruptedException e ){ //a kivétel kezelése

Szálak létrehozása - példa //Source file: MyThread.java public class MyThread extends Thread { public MyThread() { public void run() { while( true ) try{ System.out.println(" A szal neve: "+getname()); sleep( 1000 ); catch( InterruptedException e ){ public MyThread(String name) { super( name );

Szálak létrehozása - példa public class Control { private MyThread threads[]; public Control() { threads = new MyThread[ 2 ]; threads[ 0 ] = new MyThread( "1-es szal"); threads[ 1 ] = new MyThread( "2-es szal"); threads[ 0 ].start(); threads[ 1 ].start(); public static void main(string[] args) { Control c = new Control();

Szálak létrehozása - példa //Source: MyRunnable.java public class MyRunnable implements Runnable { public MyRunnable() { public void run() { while( true ) { System.out.println("A szal neve:"+ (Thread.currentThread()).getName() ); try{ Thread.sleep( 1000 ); catch( InterruptedException e ){

Szálak létrehozása - példa //Source file: Control.java public class Control { public MyRunnable objects[]; public Thread threads[]; public Control() { objects = new MyRunnable[ 2 ]; objects[ 0 ] = new MyRunnable(); objects[ 1 ] = new MyRunnable(); threads = new Thread[ 2 ]; threads[ 0 ] = new Thread(objects[ 0 ]); threads[ 1 ] = new Thread(objects[ 1 ]); threads[ 0 ].start( ); threads[ 1 ].start( ); public static void main(string[] args) { Control c = new Control();

Szálak összekapcsolása a join() metódus segítségével, ami lehetővé teszi, hogy egy szál, mielőtt elkezdene műveleteket végezni valamilyen adatokkal, ha szükséges, megvárja, hogy egy másik szál befejezze az illető adatokkal kapcsolatos, már elkezdett műveletek végrehajtását join() megvárja amíg a másik szál befejezi a műveleteket join(int ido) a megadott ideig vár Példa: két szálat hozunk létre, az egyik kiír egy szöveget és vár 5 másodpercet, a másik kiírja a nevét, majd megvárja, amíg az első befejezi a műveletek végrehajtását

Szálak összekapcsolása //Source file: MyThread1.java public class MyThread1 extends Thread { public MyThread1(String name) { super( name); public void run() { System.out.println(getName() + "is running"); for(int i=0;i<5;i++){ try{ sleep( 500 ) ; catch( InterruptedException e ){ System.out.println(getName()+" writes "+Integer.toString(i));

Szálak összekapcsolása //Source file: MyThread2.java public class MyThread2 extends Thread { public MyThread1 waitedthread; public MyThread2(String name, MyThread1 waitedthread){ super( name ); this.waitedthread = waitedthread; public void run() { System.out.println(getName()+" waits for Thread "+waitedthread.getname()); try{ waitedthread.join(); catch( InterruptedException e ){ System.out.println(waitedThread.getName()+ " has been finished"); System.out.println(getName()+" has been finished");

Szálak összekapcsolása //Source file: Control.java public class Control { public static void main(java.lang.string args[]) { MyThread1 thread1 = new MyThread1("First Thread"); MyThread2 thread2 = new MyThread2("Second thread1.start(); thread2.start(); Thread",thread1);

Szálak prioritása Minden szálhoz egy adott prioritási szint rendelhető hozzá (1-től 10-ig), a setpriority() metódus segítségével (alapértelmezett érték: 5): Thread.MIN_PRIORITY értéke 1 Thread.NORM_PRIORITY értéke 5 Thread.MAX_PRIORITY értéke 10 Démon szálak (Daemon Threads): a démon processzekhez hasonló alacsony prioritású szálak, amelyek a háttérben hajtanak végre műveleteket, és automatikusan megsemmisülnek a többi (nem démon) szál leállásakor (gyakorlatilag akkor kapnak processzor időt, amikor más szálak éppen nem tartanak igényt rá) egy szál démon szálba alakítható a setdaemon() metódussal a Java garbage collector is egy démon szál

Szálak szinkronizálása a C.A. Hoare által bevezetett monitor ok segítségével, amelyek bizonyos erőforrásokhoz rendelhetőek hozzá egy végrehajtási szál egy szinkronizált metódus meghívásával foglalhat el egy monitort, és ebben az esetben a többi szálnak várnia kell, az erőforrás felszabadulásáig mindenik szinkronizált metódussal rendelkező objektumhoz hozzárendelődik egy monitor public synchronized void my_method() {... az osztályokhoz is hozzárendelődnek monitorok, melyeket a statikus szinkronizált metódusok meghívásakor alkalmazunk public static synchronized void my_static_method() {... Az Object osztály wait() és notify() metódusai: egy szinkronizált programblokkon belül, a wait() metódus meghívásával a szál várakozásba kezd (pl., ha a végrehajtás előtt még más műveletek elvégzése is szükséges), amíg egy másik szál (pl. az illető műveletek elvégzése után) a notify() (vagy notifyall(), ha több szál vár ugyanazon monitor felszabadulására) metódus segítségével értesíti, hogy folytathatja a végrehajtást (ezek a metódusok csak szinkronizált programblokkokon belül használhatóak, egyébként IllegalMonitorStateException t kapunk)

Szálak szinkronizálása - példa egy irodában több titkárnő (Producer) különböző dokumentumok (Product) előállításán dolgozik, külön számítógépeken. Rendelkezésükre áll néhány nyomtató (Consumer), melyekhez mindannyian hozzáférnek. Egy-egy dokumentum előállítási ideje különbözik, és a nyomtatókat véletlenszerűen választják. Szimuláljuk az iroda működését. a Buffer a nyomtatókhoz hozzárendelt várakozási zóna, a Counter osztályt a dokumentumok számozására használjuk