Jonny Karlsson 19.2.2009 PROCESSPROGRAMMERING Föreläsning 4 (26.2.2009)‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.

Slides:



Advertisements
Liknande presentationer
Klasser och objekt.
Advertisements

Programmeringsteknik Föreläsning 6 Skolan för Datavetenskap och kommunikation.
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Metoder i java Det finns två typer av metoder i java
Föreläsning 4 Python: mera om funktioner och parametrar
Arv.
Inkapsling.
Objektorienterad tänkande
Polymorfism.
Metoder.
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Objektorienterad programmering i Java
Programmering i C# 3. Klasser.
PROCESSPROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Föreläsning 5. Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Räckvidd och synlighet. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Synlighet (meddelandesändning) Det.
UTVECKLING MED RAMVERKET.NET Marcus Medina. Dagens visdomsord ” Ingen vet vad han klarar innan han har försökt. ” - Publilius Syrus (85 f.Kr.-43 f.Kr.).
Arv.
Programmeringsteknik för Media1 & K1
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Trådsäkerhet - Memory consitency error - Guarded blocks - Lock Objects - Immutable Objects -
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Jonny Karlsson GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 9 ( ) INNEHÅLL: -Tabeller av klassobjekt -Användning av Java API specifikationen.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Next previous Innehåll Del 1-trådar Del 2-URLer Del 1: Trådar Föreläsning 8.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Introduktion till klasser, objekt och BlueJ Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( )‏ Innehåll:  Introduktion till Java EE (Enterprise Edition)  Enterprise Java Beans.
Föreläsning 4 Klasser Och Objekt.
1. Ett problem/uppgift.
INTRODUKTION TILL PROGRAMMERING
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
1 Föreläsning 8 Mer om klasser och objektorientering.
7. Delegerare och notifierare
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: - Förening av dataströmmar -Blockerande I/O multiplexering -Icke blockerande.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( )‏ Innehåll:Trådar: - Avbrott (”interrupts”)‏ - Metoden join()‏ Högnivå objekt för.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 5 Klasser och instanser
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( )‏ Innehåll:  Att designa parallella program - manuell vs. automatisk parallellisering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Klass och konstruktorer Klass med set- och get-metoder Klass och fält Fler metoder.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
1 Mer om metoder, variabler, klasser och objekt. Kursboken: - Kapitel 6 - Kapitel 8.
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements - Liveness

Jonny Karlsson Intrinsic Locks och synkronisering Synkroniseringen är byggd runt en intern enhet som på engelska kallas för intrinsic lock eller monitor lock Varje objekt är associerat med ett intrinsic lock Varje tråd som vill komma åt ett objekts attribut måste komma över ett objekts intrinsic lock innan attributet är åtkomligt När tråden är klar måste den ”lösgöra” låset Så länge som en tråd ”äger” ett intrinsic lås kan ingen annan tråd komma över samma lås. Den andra tråden kommer att blockeras när den försöker komma över låset

Jonny Karlsson Intrinsic Locks och synkronisering När en tråd anropar en synkroniserad metod tar den automatiskt över intrinsic låset för metodens objekt och lösgör låset när metoden returnerar (eller avslutas på annat sätt)‏ Vad händer då i följande fall??? Kan b manipuleras samtidigt som a inkrementeras? class variabler { int a, b; synchronized inkrementera()‏ {a++;}}

Jonny Karlsson Intrinsic Locks och synkronisering Vad händer då om statisk synkroniserad metod anropas??? En statisk metod är ju associerad med en klass och inte med ett objekt!! I detta fall tar en tråd vid metodanropet över låset för klassobjektet associerat med klassen, m.a.o. åtkomst till en klass' statiska fält kontolleras av ett lås som är frånskilt från de lås som är associerade med instanser/objekt av klassen.

Jonny Karlsson Synchronized Statements Ett annat sätt att skapa synkroniserad kod är att använda synchronized statements Synchronized statements måste specificera det objekt som tillhandahåller intrinsic låset. public void addName(String name) { synchronized(this) synchronized(this) { lastName = name; lastName = name; nameCount++; nameCount++; } nameList.add(name); nameList.add(name);}

Jonny Karlsson Synchronized Statements I exemplet måste addName metoden synkronisera uppdateringar av lastName och nameCount men måste samtidigt undvika synkronisering av anrop av andra objekts metoder. Att anropa metoder ur andra objekt från synkroniserad kod kan ställa till problem (vi tittar närmare på detta lite senare)‏ Synchronized statements är också väldigt nyttiga om vi behöver synkronisera flera fält inom ett objekt som är oberoende av varandra Alla fält måste synkroniseras men det finns ingen orsak att hindra uppdatering av alla andra fält när ett fält uppdateras

Jonny Karlsson Synchronized Statements public class MsLunch { private long c1 = 0; private long c1 = 0; private long c2 = 0; private long c2 = 0; private Object lock1 = new Object(); private Object lock1 = new Object(); private Object lock2 = new Object(); private Object lock2 = new Object(); public void inc1() { public void inc1() { synchronized(lock1) { synchronized(lock1) { c1++; c1++; } } public void inc2() { public void inc2() { synchronized(lock2) { synchronized(lock2) { c2++; c2++; } }}

Jonny Karlsson Synchronized Statements I exemplet på föregående sida måste åtkomst av två attribut c1 och c2 synkroniseras c1 och c2 används aldrig tillsammans så det finns ingen orsak t.ex. att hindra att ingen annan tråd kan uppdatera c1 medan c2 håller på och uppdateras Vi kan då skapa två objekt av Object-klassen som vi ger som parameter til synchronzied På så så vis får vi uppdateringen av c1 och c2 relaterade till olika objekt även om c1 och c2 hör till samma objekt Detta gör parallelisering mycke smidigare eftersom vi undviker onödig blockering!!!

Jonny Karlsson Liveness Med ”liveness” menas en parallellexekverande applikations förmåga att exekvera lägligt. De vanligaste ”Liveness” problemen som kan uppstå är: Deadlock Två trådar är blockerade för evigt i väntan på varandra Två trådar är blockerade för evigt i väntan på varandraStarvation En tråd som inte kan processera eftersom en annan tråd ”tar för lång tid på sej” vid hantering av en delad resurs En tråd som inte kan processera eftersom en annan tråd ”tar för lång tid på sej” vid hantering av en delad resursLivelock I princip samma som deadlock fast tvärtom dvs. två trådar som ”väcker upp” varandra konstant hela tiden och kan därför inte processera normalt I princip samma som deadlock fast tvärtom dvs. två trådar som ”väcker upp” varandra konstant hela tiden och kan därför inte processera normalt

Jonny Karlsson Deadlock Det klassiska exemplet att beskriva en Deadlock situation är ”de två bugande kompisarna” Två kompisar har infört en god sed att när kompis A bugar åt kompis B slutar A inte buga innan B har bugat tillbaka. Men vad händer om båda bugar exakt samtidigt??!!? - JO! bägge lämnar och buga förevigt eftersom de båda väntar på att den andra skall buga tillbaka! Följande programkod simulerar detta exempel: