De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.

Verwante presentaties


Presentatie over: "Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen."— Transcript van de presentatie:

1 Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen

2 Inleiding Informatica Prof. Dr. O. De Troyer 2 Vooruitziend zijn Voorbeeld int aantal = Integer.parseInt(br.readLine()) ; Wat kan er verkeer gaan? –br, een BufferedReader object refereert naar een file die er plots niet meer is File op diskette die uit de diskette-lezer werd genomen File via network en verbinden is verbroken Iemand heeft file verwijderd van de harde schijf –Input is geen getal maar bv. een letter of een ander symbool

3 Inleiding Informatica Prof. Dr. O. De Troyer 3 Vooruitziend zijn (2) Wat als er iets verkeer gaat in een methode? –De methode kan het probleem signaleren throw exception waarbij exception een referentie is naar een object uit de klasse Exception - Gevolg De uitvoering van de methode stopt Indien er verder niets gedaan wordt, wordt de “throw” doorgegeven aan de aanroepende methode

4 Inleiding Informatica Prof. Dr. O. De Troyer 4 Het propageren van een “throw” main Methode die een“throw”uitvoert Bijvoorbeeld door int aantal = Integer.parseInt(br.readLine()) ; Methode die een“throw”uitvoert Bijvoorbeeld door int aantal = Integer.parseInt(br.readLine()) ; methodeA methodeY methodeX... Methode stopt Main stopt Geeft “throw” door Alle methoden stoppen

5 Inleiding Informatica Prof. Dr. O. De Troyer 5 De “throw” Meestal throw new Exception-klasse(String-Argumenten) Voorbeelden throw new NumberFormatException(“Number expected”) throw new FileNotFoundException(“Log file is necessary”) –De string-argumenten worden afgedrukt Geeft bijkomende informatie

6 Inleiding Informatica Prof. Dr. O. De Troyer 6 De klasse Exception De klasse Exception heeft diverse subklassen –RunTimeException –IOException –NullPointerException –NumberFormatException –...

7 Inleiding Informatica Prof. Dr. O. De Troyer 7 De “trows” uitdrukking Elke methode die een “throw” kan uitvoeren moet dit aangeven in zijn hoofding Voorbeeld: public static void main(String [ ] arg) throws IOException Kan IOException throw’s uitvoeren

8 Inleiding Informatica Prof. Dr. O. De Troyer 8 Problemen opvangen Default –het programma stopt na een “throw” Alternatief –“throw” opvangen en corrigerende actie laten uitvoeren try { code die kan leiden tot een throw } catch (Exception e) { code met decorrigerende acties }

9 Inleiding Informatica Prof. Dr. O. De Troyer 9 Try en catch Voorbeeld 1: verbeteren van foutenboodschappen try { int n = Integer.parseInt( br.readLine() ); } catch (NumberFormatException e) { System.err.println(“Bad format given here”); throw e; } System.out.println(“You have entered” + n) ; try { code die kan leiden tot een throw } catch (Exception e) { code met decorrigerende acties } Aangepaste foutenboodschap Fout wordt terug gesignaleerd Wordt enkel uitgevoerd indien geen fout Wordt enkel uitgevoerd indien geen fout Standaard error stream

10 Inleiding Informatica Prof. Dr. O. De Troyer 10 Try en catch (2) Voorbeeld 2: fout opvangen try { int n = Integer.parseInt( br.readLine() ); } catch (NumberFormatException e) { System.err.println(“Bad format given here”); System.err.println(“Try again”); n = Integer.parseInt( br.readLine() ); } System.out.println(“You have entered” + n) ; Wordt enkel uitgevoerd indien geen fout Wordt enkel uitgevoerd indien geen fout Probleem!

11 Inleiding Informatica Prof. Dr. O. De Troyer 11 Try en catch (3) beter boolean noGoodInput = true ; while (noGoodInput ) { noGoodInput = false ;// we hopen dat het goed gaat try { int n = Integer.parseInt( br.readLine() ); } catch (NumberFormatException e) { System.err.println(“Bad format given here”); System.err.println(“Try again”); noGoodInput = true ;// het ging dus mis n = Integer.parseInt( br.readLine() ); } System.out.println(“You have entered” + n) ;

12 Inleiding Informatica Prof. Dr. O. De Troyer 12 Waar een probleem opvangen? Een probleem hoeft niet meteen opgevangen te worden Methode moet voldoende informatie hebben om “corrigerende” actie uit te voeren methodeA methodeD methodeC methodeB Methode die een “throw” uitvoert Methode die een “throw” opvangt

13 Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 11: Threads

14 Inleiding Informatica Prof. Dr. O. De Troyer 14 Programma moet soms meerdere taken tegelijkertijd volbrengen Voorbeeld 1: multi-media programma Speel achtergrond muziek Toon een opeenvolging van beelden Scroll de tekst die de beelden uitlegt Voorbeeld 2: WWW-browser Scrollen in pagina Opzoeken nieuwe pagina Stop toets indrukken

15 Inleiding Informatica Prof. Dr. O. De Troyer 15 Voor elke taak kan men een “thread” gebruiken Threads kunnen tegelijkertijd uitgevoerd worden Opmerking –De meeste computers kunnen geen taken tegelijkertijd uitvoeren –De gelijktijdigheid wordt gesimuleerd Gebruik van interleaving techniek

16 Inleiding Informatica Prof. Dr. O. De Troyer 16 De klasse Thread Threads zijn objecten van de klasse Thread Belangrijkste methoden om thread objecten te controleren: –start : start uitvoering van de code geassocieerd met de thread –suspend : onderbreekt de uitvoering van de code tot de methode resume wordt aangeroepen –resume : zet de uitvoering van de code verder na een suspend –sleep : onderbreekt de uitvoering van de code voor een aangegeven aantal milliseconden –stop : stopt de uitvoering van de code

17 Inleiding Informatica Prof. Dr. O. De Troyer 17 De klasse Thread - voorbeeld 1 class DoeNietsThreads { public static void main( String [ ] arg) { Thread t1 = new Thread() ; Thread t2 = new Thread() ; t1.start () ; t2.start () ; } Om een zinvolle thread te maken moet men een subklasse maken van Thread

18 Inleiding Informatica Prof. Dr. O. De Troyer 18 De klasse Thread - voorbeeld 2 class TellerThread extends Thread { public TellerThread( int x) { this.x = x ; } public void run () { int i = 0 ; while (i < 15 ) { System.out.println( i ) ; i+ = x ; } private int x ; } De methode run wordt overschreven

19 Inleiding Informatica Prof. Dr. O. De Troyer 19 De klasse Thread - voorbeeld 2 (2) class TellerThreadsVoorbeeld { public static void main( String [ ] arg) { TellerThread t1 = new TellerThread(2) ; TellerThread t2 = new TellerThread(3) ; t1.start () ; t2.start () ; } Mogelijke output 0 2 4 6 8 10 12 0 3 6 9 Mogelijke output 0 2 4 6 8 10 12 0 3 6 9

20 Inleiding Informatica Prof. Dr. O. De Troyer 20 De klasse Thread - voorbeeld 2 (3) class TellerThread extends Thread { public TellerThread( int x) { this.x = x ; } public void run () { int i = 0 ; while (i < 15 ) { System.out.println( i ) ; i+ = x ; try { sleep(1) ; } catch (Exception e) } private int x ; } Output 0 2 3 4 6 9 8 Output 0 2 3 4 6 9 8 Onderbreek uitvoering gedurende 1 millisec

21 Inleiding Informatica Prof. Dr. O. De Troyer 21 Threads synchroniseren Verschillende threads kunnen mogelijk dezelfde variabelen wijzigingen –Mag niet gelijktijdig

22 Inleiding Informatica Prof. Dr. O. De Troyer 22 Threads synchroniseren (2) Oplossing: synchronized methode Indien een thread een gesynchroniseerde methode uitvoert voor een object kan geen enkele andere thread dit object gebruiken –De andere threads die het object nodig hebben komen in een wachtrij Wachtrij per object

23 Inleiding Informatica Prof. Dr. O. De Troyer 23 Een “synchronized” methode class Voorbeeld { public Voorbeeld () { } synchronized void update () { aantal++ ; } private int aantal ; }

24 Inleiding Informatica Prof. Dr. O. De Troyer 24 Threads synchroniseren (3) Threads kunnen afhankelijk zijn van elkaar –Een thread kan moeten wachten op de resultaten van een andere thread

25 Inleiding Informatica Prof. Dr. O. De Troyer 25 Threads synchroniseren (4) Oplossing wait () of wait (tijd-in-milliseconden) Aan te roepen als thread niet verder kan Aan te roepen vanuit een synchronized method Thread komt in de wachtrij voor dit object tot –notify of notifyAll wordt aangeroepen vanuit een andere thread voor dit object of –tijd-in-milliseconden verstreken is notify () of notifyAll () Wordt aangeroepen door een thread Brengt de wachtende thread(s) op de hoogte van een gewijzigde situatie

26 Inleiding Informatica Prof. Dr. O. De Troyer 26 Threads synchroniseren - voorbeeld class Wachter { public Wachter () { ok = false; } synchronized void wacht () { while (! ok) { try { wait(500) ; } catch (InterruptedException e) } ok = false ; } synchronized void klaar () { ok = true ; notify() ; } private boolean ok ; }


Download ppt "Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen."

Verwante presentaties


Ads door Google