Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilJáchym Švec
1
Jedenácté cvičení Vlákna
2
Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading - více „toků“ se vykonává „současně“ v jednom programu
3
Java cv113 Důvody použití vláken Monitoring stavu úlohy např. progressbar Umožnění reakce během provádění jiné úlohy např. reakce na Storno během výpočtu Využití výkonu, který by byl zbytečně vyplýtván čekáním např. čekání na vstup z klávesnice Simulace paralelních procesů
4
Java cv114 Jak vytvořit vlákno I Vytvořit třídu zděděnou ze třídy Thread Překrýt metodu run() Vlákno se pak spouští metodou start()
5
Java cv115 Jak vytvořit vlákno I - příklad class Vlakno1 extends Thread { public void run() { //vlastni kod vlakna... } //spousteni Vlakno1 vlakno = new Vlakno1(); vlakno1.start();...
6
Java cv116 Jak vytvořit vlákno II Vytvořit třídu implementující interface Runnable Implementovat v ní metodu run() Vytvořit instanci vlákna a předat jí objekt třídy jako parametr konstruktoru. Zavolat na instanci vlákna metodu start()
7
Java cv117 Jak vytvořit vlákno II - příklad class Vlakno2 implements Runnable { public void run() { //vlastni kod vlakna... }... //spousteni Vlakno2 vlakno = new Vlakno2(); Thread t = new Thread(vlakno); t.start();...
8
Java cv118 Funkční příklad public class Vlakno1 extends Thread { String name; public Vlakno1(String name) {this.name = name;} public void run() { while (true) { System.out.println(name); try { Thread.sleep(1000); } catch (InterruptedException e) { } public static void main(String[] args) { Vlakno1 v1 = new Vlakno1("Hynek"); Vlakno1 v2 = new Vlakno1("Vilem"); Vlakno1 v3 = new Vlakno1("Jarmila"); v1.start(); v2.start(); v3.start(); }
10
Java cv1110 Přístup ke sdíleným zdrojům Pokud více vláken přistupuje ke sdíleným zdrojům, vzniká problém synchronizace Přepnutí vláken v nevhodném místě může způsobit problém nekonzistence dat Tzv.: KRITICKÉ SEKCE
11
Java cv1111 Příklad – s kritickými sekcemi public class Bod { int[] pozice = new int[2]; public void setPozice(int x, int y) { pozice[0] = x; //kriticke misto pozice[1] = y; } public int[] getPozice() { return new int[] {pozice[0], pozice[1]}; }
12
Java cv1112 Synchronizace kritických sekcí Klíčové slovo synchronized Označíme takto kritické sekce Předání řízení nemůže nastat, pokud je vlákno v synchronized sekci Používá se princip monitorů každý objekt v Javě má svůj monitor lze označit jako synchronized i menší úseky než celé metody lze použít monitor jiného objektu
13
Java cv1113 Příklad – se synchronizací public class Bod { int[] pozice = new int[2]; synchronized public void setPozice(int x, int y) { pozice[0] = x; //kriticke misto pozice[1] = y; } synchronized public int[] getPozice() { return new int[] {pozice[0], pozice[1]}; }
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.