Parallel programming
This presentation is the property of its rightful owner.
Sponsored Links
1 / 18

Parallel Programming PowerPoint PPT Presentation


  • 68 Views
  • Uploaded on
  • Presentation posted in: General

Parallel Programming. Thread Synchronization. Heute. Lösung zu Assignment 2 Erstellen und Starten von Threads in Java Das synchronized Schlüsselwort in Java Ausblick auf Assignment 3. Live. 1. – Assignment 2. 2. – Starten von Threads in java. Threads erstellen.

Download Presentation

Parallel Programming

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Parallel programming

Parallel Programming

Thread Synchronization


Heute

Heute

  • Lösung zu Assignment 2

  • Erstellen und Starten von Threads in Java

  • Das synchronized Schlüsselwort in Java

  • Ausblick auf Assignment 3


1 assignment 2

Live

1. – Assignment 2


2 starten von threads in java

2. – Starten von Threads in java


Threads erstellen

Threads erstellen

Klasse java.lang.Thread

Zwei Möglichkeiten:

  • Interface Runnable

  • Thread.run überschreiben


Interface runnable

Interface Runnable

publicinterfaceRunnable{voidrun();}

  • //in MyProcess.java

  • publicclassMyProcessimplementsRunnable {voidrun() {//what I wantthisthreadto doSystem.out.println(“Hellofromthread“); }

    }

    //whereyoustartthethread

    MyProcess mp = newMyProcess();

    Thread t = new Thread(mp);

    t.start();


Thread run berschreiben

Thread.run überschreiben

  • //in MyProcess.java

  • publicclassMyProcessextends Thread {voidrun() {//what I want this thread to doSystem.out.println(“Hello from thread“); }

  • }

  • //where you start the thread

  • MyProcess mp = newMyProcess();

  • mp.start();


Was ist besser

Was ist besser?

Thread.run

+ Einfacher aufzusetzen

+ Mehr Kontrolle über das Thread-Objekt

  • Weniger flexibel (Vererbung)

    Runnable Interface

    + Steht Vererbung nicht im Weg

    + Ist nicht an Threads gebunden

    - Benötigt einen Schritt mehr zum Aufsetzen


Threads auf eis

Threads auf Eis

  • try { //doze a random time (0 to 0.5 secs) tosimulateworkloadThread.sleep( (int)(Math.random()*500) );} catch (InterruptedException e) { … }

    • Thread.sleep(long) versetzen den aktuellen Thread für mindestens x Millisekunden in den sleep-Zustand.

    • Wozu InterruptedExcpetion?


Ohne interruptedexception

Ohne InterruptedException

Thread A

Thread B

Thread.sleep(500)

Katastrophe

Zeit


Mit interruptedexception

Mit InterruptedException

Thread A

Thread B

Thread.sleep(500)

Katastrophe

Zeit


3 synchronized

3. – synchronized


Intrinsic synchronized

„Intrinsic“ synchronized

  • publicclassBuffer {publicsynchronizedvoidwrite(int i) { … }publicsynchronizedintread() { … }}

    • Für Methoden

    • Thread muss zunächst exklusiven „lock“ erlangen

    • Jede Klasse und jedes Objekt hat einen „intrinsic lock“

Schliessen sich gegenseitig aus („mutual exclusion“), weil beide „this“ als „lock“ verwenden


Synchronized block

synchronized Block

  • publicvoidsomeMethod1(){//do somethingbeforesynchronized(anObject) { … }//do something after}publicvoidsomeMethod2() {//do somethingbeforesynchronized(anObject) { … }//do something after}

Schliessen sich gegenseitig aus, weil beide das selbe Objekt als „lock“ verwenden


Fragen

Fragen

  • Können statische methoden (staic) auch synchronized werden?

    • Was wäre das „lock object“?

  • Wieso Objekte als „locks“?

    • und nicht z.B. Zahlen, oder Strings?


Noch mehr fragen

Noch mehr Fragen

  • publicvoidaddCustomer(DB db, Customer c) {synchronized(db) {addAddress(db, c.Address);db.newCustomer(c); }}publicvoidaddAddress(DB database, Address a) {db.verifyAddress(a);

  • synchronized(database) {db.newAddress(db, a); }}

Zweimal wird das DB-Objekt als „lock“ verwendet. Funktioniert das? Wieso? Wieso nicht?


4 assignment 3

4. – Assignment 3


Das producer consumer beispiel

Das producer/consumer-Beispiel

Producer

Consumer

write()‏

  • Der „producer“ produziert ständig neue Werte und schreibt sie in einen gemeinsamen „buffer“

  • Der „consumer“ liest die Werte aus dem gemeinsamen „buffer“ und verwendet sie

  • Jeder Wert darf nur genau einmal konsumiert werden.

  • Die Frage: Wie synchronisiert man die zwei?

read()‏

write()‏

read()‏

Buffer

write()‏

read()‏


  • Login