Trådar. Aktiva objekt

Relevanta dokument
Trådar och trådsäkerhet. Objekt-orienterad programmering och design Alex Gerdes, 2018

Trådar och trådsäkerhet. Objekt-orienterad programmering och design Alex Gerdes, 2016

Föreläsning 11. Trådar

Föreläsning 14. Trådar. Trådar Trådsäkerhet. Aktiva objekt. Motivering

Föreläsning 11. Trådar Trådsäkerhet

Parallellism, återblick

Concurrency Saker händer samtidigt. Process En instans av ett program

Java TRÅDAR OCH GRAFIK. FAdil galjić

Trådar. Motivering. Många program måste kunna hålla på med flera saker samtidigt, till exempel. fleranvändarsystem.

9 Aktiva objekt och trådar

Föreläsning 7. Designmönstret Singleton. Designmönstret State. Trådar

Tentamen Nätverksprogrammering Lösningsförslag

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

1.1 Runnable och Thread

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

Synkronisering. Ordning och reda

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Trådar i Java. Johan Ånäs. Seminarieuppsats Institutionen för informationsbehandling Åbo Akademi

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Klassen javax.swing.timer

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Classes och Interfaces, Objects och References, Initialization

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Tentamen Nätverksprogrammering Lösningsförslag

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Realtidssystem. - Semaforer, trådsynkronisering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp

DD1342 Programkonstruktion för F1,

Chapter 4: Writing Classes/ Att skriva egna klasser.

Exam Concurrent and Real-Time Programming

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Enkla variabler kontra referensvariabel

Föreläsning 15: Parallella subrutiner. Parallellitet. Varför parallella underprogram?

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Tentamen EDA698 Realtidssystem (Helsingborg)

Realtidssystem. - Dödläge - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 5

JAVA Mer om klasser och objektorientering

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Tentamen Nätverksprogrammering Lösningsförslag

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Design av en klass BankAccount som representerar ett bankkonto

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Föreläsnings 9 - Exceptions, I/O

Föreläsning 13 Innehåll

Malmö högskola 2007/2008 Teknik och samhälle

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

Objektorienterad programmering D2

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Att skriva till och läsa från terminalfönstret

Malmö högskola 2008/2009 CTS

Realtidssystem. - Semaforer, trådsynkronisering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 2

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Övningsuppgift 8, Mer om enhetstest

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Mer om klasser och objekt

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Kopiering av objekt i Java

Objektsamlingar i Java

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Objekt och klasser - Introduktion

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

PROGRAMMERINGSTEKNIK TIN212

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Realtidssystem. - Introduktion, jämlöpande exekvering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 1

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540) Ansvarig: Jan Skansholm, tel eller

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tentamen Lösningar EDA698 Realtidssystem

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Transkript:

Föreläsning 11 Trådar 1 Aktiva objekt Det är välkänt från vardagslivet att saker händer samtidigt. Aktiva objekt gör saker på eget initiativ, medan passiva objekt endast gör saker när de blir ombedda. Det är viktigt att det underliggande systemet stöder parallellism så att man kan modellera verkligheten på ett bra sätt. Det är onaturligt att modellera parallellism som ett sekventiellt förlopp. I datorer med en processor simuleras parallellismen. task 1 task 2 task 3 task 1 task 2 task 3 Tre processer Äkta parallellism Tre processer Simulerad parallellism 2

Motivering Många program måste kunna hålla på med flera saker samtidigt: bokningssystem av olika slag en webbserver som måste kunna leverera flera webbsidor samtidigt en grafisk applikation som ritar samtidigt som den arbetar med nästa bild ett grafiskt användargränssnitt som utför beräkningar och samtidigt är redo att ha dialog med användaren en webbläsare som börjar visa ett dokument innan hela dokumentet är nedladdat Denna typ av program kallas samverkande program (concurrent programs). Vi skall här endast ge en introduktion till programmering med samverkande program, för mer djupgående studier hänvisas till kursen Parallellprogrammering. 3 Trådar I Java beskriver man aktiva objekt (och parallellism) med hjälp av standardklassen Thread. Aktiviteter som pågår samtidigt kallas därför i Java för trådar. objekt1 m0 m1 m2 objekt2 m5 m6 objekt3 m10 m11 m12 objekt5 m3 m7 objekt4 m8 m4 m9 4

Klassen Thread <<interface>> Runnable run(): void Note: $ betyder static Thread Thread() Thread(Runnable) Thread(Runnable, String) Thread(String name) $currentthread(): Thread getname(): String interrupt(): void $interrupted(): boolean join(): void join(long): void run(): void setdaemon(boolean): void setpriority(int): void $sleep(long ):void $sleep(long, int): void start(): void $yield(): void... 5

Icke-deterministiskt beteende Sekventiella program säges vara deterministiska vilket betyder att: vilka operationer som utförs i programmet är en konsekvens av föregående operationer det är förutsägbart i vilken ordning operationerna i ett sekventiellt program kommer att utföras om ett program körs flera gånger med samma indata kommer samma resultat att erhållas varje gång Program med parallellism uppvisar ett icke-deterministiskt beteende: i vilken ordning operationerna sker mellan de olika programflödena vet vi inte två programkörningar med samma indata kan ge olika resultat 8

Metoden sleep() En tråd kan temporärt avbryta sin exekvering med metoden sleep(), som är en klassmetod i klassen Thread. Metoden sleep() finns i följande två versioner: public static sleep(long mills) throws InterruptedException public static sleep(long mills, int nanos) throws InterruptedException Tiden som man vill avbryta trådens exekvering anges alltså i millisekunder respektive millisekunder och nanosekunder. Eftersom sleep() kan kasta en kontrollerad exceptionell händelse måste anropet av metoden ligga i ett try-catch-block. 9

Interfacet Runnable Ett Runnable-objekt abstraherar begreppet ett jobb (t.ex. ett recept). Ett Thread-objekt abstraherar begreppet en arbetare (t.ex. en kock). Hur kan vi associera ett jobb med en arbetare? Genom att klassen Thread har en konstruktor public Thread(Runnable target) Konstruktorn skapar ett Thread-objekt som när det startas exekverar metoden run() i objekt target. Exempel: Runnable recipe =...; Thread chef = new Thread(recipe) 13 Exempel Runnable Vi skriver en klass Writer som har två instansvariabler text och interval. När ett objekt av klassen Writer exekveras skall texten text skrivas ut gång på gång med ett tidsintervall av interval sekunder mellan utskrifterna. 14

Exempel Runnable För att demonstrera hur flera objekt av klassen Writer kan exekvera parallellt ges nedan ett program som under en minut skriver ut "IFK" var 3:e sekund, "AIK" var 4:e sekund och "Ut med domaren" var 5:e sekund. 16

Exempel Runnable Utskriften från programmet blir: IFK AIK Ut med domaren IFK AIK IFK Ut med domaren AIK IFK Ut med domaren IFK AIK IFK Ut med domaren AIK IFK AIK IFK Ut med domaren IFK AIK Ut med domaren IFK AIK IFK Ut med domaren AIK IFK IFK Ut med domaren AIK IFK AIK Ut med domaren IFK AIK IFK Ut med domaren IFK AIK IFK Ut med domaren AIK IFK 19

Trådsäkerhet Då ett objekt modifieras kan det inta ett antal tillfälliga tillstånd som inte är konsistenta (d.v.s. ogiltiga). Om en tråd avbryts under en modifikation av ett objekt, så kan det lämna objektet i ett ogiltigt tillstånd. En klass säges vara trådsäker om den garanterar konsistens för sina objekt, även om det finns multipla trådar närvarande. tråd 1 tråd 2 avariable = 123; avariable avariable = 45;????? 24

Kritiska sektioner Kodsegment som har access till samma objekt från olika separata trådar utgör en s.k. kritisk sektion (eng: critical section), och måste synkroniseras på så sätt att endast en tråd i taget får tillgång till objektet, annars kan objektet hamna i ett inkonsistent tillstånd. 25

Synkronisering För att kontot inte skall hamna i ett inkonsistent tillstånd måste metoden withdraw synkroniseras, d.v.s. endast en tråd i taget skall kunna få tillgång till metoden. Java's lösning för att åstadkomma synkronisering: varje objekt definieras som en monitor, vilken har ett singulärt lås för att en tråd skall få tillträde till en kritisk sektion måste tråden först få tillgång till låset att ha tillgång till låset innebär att ingen annan tråd kan ha tillgång till låset låset återlämnas när tråden lämnar den kritiska sektionen. Allt detta görs automatiskt med konstruktionen synchronized. Programmerarens uppgift är att identifiera de kritiska sektionerna. 28

Ömsesidig uteslutning För att göra klassen Account trådsäker räcker det inte att enbart metoden withdraw är synkroniserad, utan även metoden deposite måste synkroniseras. Detta på grund av att båda metoderna konkurrerar om att förändra tillståndet på variabeln balance. 31

Synkronisering av satser (1) Om alla metoder är synkroniserade i ett objekt kan endast en tråd åt gången använda objektet. För lite synkronisering konflikter mellan trådar inkonsistens på grund av tillgång till samma resurs För mycket synkronisering trådarna får vänta på varandra, ingen parallellism 34

Samarbete mellan trådar Synkronisering handlar om uteslutning inte samarbete. Samarbete innebär: vänta: meddela: Metoden wait() när en tråd inte kan fortsätta, så låt andra trådar fortsätta väck upp sovande trådar om det händer något som dessa kanske väntar på - suspenderar tråden och öppnar låset för objektet - andra trådar får möjlighet att exekvera synkroniserade metoder - tråden väcks när någon tråd anropar notifyall för objektet Metoden notifyall() - signalerar till andra trådar som väntar på att objektet skall vakna Anm: Det finns även en metod notify(), men den bör inte användas. 37

Problem Producer och Consumer inverterar när de använder CubbyHole. Producer kan vara snabbare än Consumer. Consumer gets 2 Producer put 3 Producer put 4 Consumer gets 4 Producer kan vara långsammare än Consumer. Producer put 5 Consumer gets 5 Consumer gets 5 Producer put 6 Förslag på lösning: Synkronisera metoderna set och get i klassen CubbyHole 42