1.1 Runnable och Thread

Relevanta dokument
1 Comparator & Comparable

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Classes och Interfaces, Objects och References, Initialization

Objektorientering: Lagring, räckvidd och livstid

Trådar. Aktiva objekt

Objektorientering: Lagring och livstid

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

TDDD78 Objektorientering: Lagring och livstid

Objektorienterad programmering

TUTORIAL: KLASSER & OBJEKT

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

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

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

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

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

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

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

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

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Klasser som datastrukturer

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Lab5 för prgmedcl04 Grafik

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äsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Kopiering av objekt i Java

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objekt och klasser - Introduktion

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Lösningsförslag övning 2.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objektsamlingar i Java

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Övningar Dag 2 En första klass

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

DD1342 Programkonstruktion för F1,

Klasshierarkier - repetition

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

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

Grundläggande programmering med C# 7,5 högskolepoäng

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Objektorienterad Programkonstruktion. Föreläsning jan 2017

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

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

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

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

JAVA Mer om klasser och objektorientering

DAT043 - Föreläsning 7

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

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

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

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

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

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

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

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

Modeller, Objekt och Klasser

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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

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]

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

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

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

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Introduktion till arv

TDDC77 Objektorienterad Programmering

TENTAMEN OOP

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

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

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Dynamisk bindning och polymorfism

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Teoretisk del. Facit Tentamen TDDC (6)

Transkript:

1 Trådar 1.1 Runnable och Thread I övningen är ShoutThread hårdkodad att använda just ShoutRunnable. Det typiska förfarandet brukar annars vara att skicka över din Runnable i konstruktor-anropet till Thread: Thread mythread = new Thread(myRunnable); mythread.start(); Att endast använda sig av Thread för att åstadkomma parallel exekvering (d.v.s. låta klassen ärva av Thread) kan vara motiverat i små exempel och för klasser interna i ett paket. Men i de flesta fall är det rekommenderat att istället placera koden i en Runnable. Det finns flera anledningar: Det innebär en lösare koppling mellan koden och själva körningen. Om klassen ärver av Thread kan den inte ärva av någonting annat. Körningen av koden kan väljas flexibelt, Thread är inte det enda alternativet. Executor Framework 1 erbjuder t.ex. hantering och körning av flera trådar asynkront. 1.2 Time of check/time of use (TOCTOU) TOCTOU-problemet kan ej uppstå för strikt icke-muterbara klasser. Då hela deras tillstånd initieras vid instantiering (konstruktoranropet) finns det ingenting som kan förändras mellan check och use. Strikt icke-muterbara klasser är per automatik trådsäkra. Notera att strikt icke-muterbarhet innebär att de helt saknar referenser till andra muterbara objekt. 1.2.1 TOCTOU I En angripare kan köra två trådar, i den ena tråden skapas en ny Period, medan den andra ligger på lur, även den med tillgång till argumenten start och end. Efter att konstruktorn i den första tråden kört testet, och konstaterat att start end, kan den andra tråden bryta detta villkor innan konstruktorn tar kopior av start och end. 1 http://download.oracle.com/javase/1.5.0/docs/guide/concurrency/overview.html 1

1.3 Deadlock Den önskade utskriften är: Emil says: I got a question from Pelle Pelle says: I got an answer from Emil Pelle says: I got a question from Emil Emil says: I got an answer from Pelle Observera något som kanske är självklart, men lätt att blanda ihop när man börjar studera parallela program: En tråd är inte knuten till ett visst objekt. Körningen startar visserligen i en viss metod i ett objekt (t.ex. run() i ett Runnable-objekt), men den kan sedan fortsätta inuti ett annat objekts metoder genom anrop av dem. Det första problemet bygger på att det inte finns någon kontroll över vad de olika trådarna får göra. Utskrifternas inbördes ordning beror på hur schemaläggningen av trådarnas körning ser ut. Tråden som startas i objektet Pelle tar monitorn till objektet Emil (genom att köra en metod där i deklarerad synchronized), och samtidigt sker det motsatta: tråden som startas i objektet Emil tar monitorn till objektet Pelle. Innan de släpper sina egna monitorer vill båda trådarna köra synkroniserade metoder i motsatt objekt, men eftersom dessa monitorer är upptagna av den andre tråden får vi en deadly embrace, d.v.s. deadlock. I det generella fallet är det bevisat att det inte går att förutsäga om deadlock kommer att kunna inträffa vid ett framtida tillfälle bland ett antal resurser och parallela program som efterfrågar dessa resurser 2. Om situationen tillåter att vissa begränsningar införs går det att förhindra att deadlock överhuvudtaget kan uppstå. Men dessa begränsningar lämpar sig sällan för operativsystem i persondatorer. Allmänt är det riskabelt att anropa metoder på andra objekt inne i ett synkroniserat block; att de metoderna inte har egna lås är svårt eller omöjligt att garantera. Då vi i lösningen bara låser under tiden vi sover och sedan släpper låset innan vi anropar p.getananswerfrom(this) kommer objektet p kunna anropa this tillbaks, utan deadlock. 2 http://en.wikipedia.org/wiki/deadlock 2

1.4 Ofullständig klassinvariant & race conditions För svar till uppgift 1 4, se javakoden inklusive kommentarer. Observera hur kod som uppfyller krav på både funktionalitet och klassinvarianter ändå kan ha problem när parallel exekvering införs. Parallelism kräver ofta att man funderar igenom olika typer av körningssituationer för att upptäcka brister och säkerhetshål. För att knyta en bit kod (en hel metod eller ett antal satser) till en viss monitor deklareras koden synchronized. Detta innebär som bekant att endast en tråd i taget kan köra någon av alla kodpartier som är knutna till motsvarande monitor. Men observera att deklaration av synchronized också är ett krav om koden påverkar variabler som flera olika trådar skriver till och läser från. För att garantera att uppdateringarna kommer i rätt ordning måste all kod som använder variablerna deklareras synchronized. 3

2 Innerklasser och anonyma klasser 2.1 Det kan vara fint med få klasser... Metoden stringprefixcomparator() kan inte returnera en singleton-instans, utan den måste skapa en ny komparator vid varje anrop eftersom varje sådan komparator är beroende av ett parametervärde (prefixlength). Observera att parametern (prefixlength) till metoden stringprefixcomparator() måste deklareras final eftersom den används i den anonyma klassen. 2.2 Statiska och icke-statiska Innerklasser Klassen Game kan vara en statisk (static) klass eftersom den inte behöver ha tillgång till något tillstånd (instansvariabler) i objekt av den omgivande klassen. 4

3 I/O 3.1 Heltalsförflyttning 5