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



Relevanta dokument
OOMPA 2D1359 Föreläsning 3

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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

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

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

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

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

Trådar. Aktiva objekt

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

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

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

Programmering för språkteknologer II, HT2011. Rum

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

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Klasshierarkier - repetition

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

SMD 134 Objektorienterad programmering

DAT043 - Föreläsning 7

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

Föreläsning 5-6 Innehåll

JAVA Mer om klasser och objektorientering

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

Laboration 1 - Grunderna för OOP i Java

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

TDDC77 Objektorienterad Programmering

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

OOP Objekt-orienterad programmering

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

Föreläsning 13 Innehåll

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

F4. programmeringsteknik och Matlab

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

1.1 Runnable och Thread

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

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

Institutionen för datavetenskap HT /2008. Testning med JUnit

Konstruktion av klasser med klasser

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

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

Enkla variabler kontra referensvariabel

Objekt och klasser - Introduktion

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

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

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

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

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

Classes och Interfaces, Objects och References, Initialization

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Generiska konstruktioner. Kursbokens kapitel 13

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

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

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

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

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

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Laboration 2: Designmönster

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

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Design av en klass BankAccount som representerar ett bankkonto

Tentamen , Introduktion till Java, dtaa98, dtea53

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

Introduktion till arv

Laboration 2: Designmönster

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Tentamen OOP

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

OOP Tenta

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

Kompilera och exekvera Javakod

Tentamen ID1004 Objektorienterad programmering December 15, 2012

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

Laboration 1: Figurer i hierarki

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

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Programmering A. Johan Eliasson

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering i Java

TENTAMEN OOP

Transkript:

2EMHNWRULHQWHUDG5HDOWLGVSURJUDPPHULQJ Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized. previous next Java Java är konstruerat på SUN Första versionen släpptes 1995 Starkt typat Dvs det går att avgöra typkompatibilitet av alla uttryck i programmet vid kompileringstillfället. Virtuell maskin (VM) som gör det maskinoberoende En speciell VM per plattformstyp överbryggar olikheter i plattformarnas arkitektur Klassbibliotek språkklasser, stränghantering, grafik, gränssnitt, fönster, Internet, händelsehantering, processer, collections, mm Bindning till WWW med applets och liknande Har fått sin huvudsakliga spridning via Internet Syntax som C. Semantik och klasser mer som Smalltalk previous next 2 Björn Eiderbäck 2000 1

Arkitektur källkod kompilera (javac) java bytekod kör (java) en virtuell maskin per plattformstyp Pc VM Mac VM Unix VM previous next 3 Java: mitt första "program" Skapa en fil med namnet MyFirstProgram.java Skriv följande kod i filen: import java.io.*; public class MyFirstProgram{ public static void main (String [] args){ System.out.println("Mitt första program!"); previous next 4 Björn Eiderbäck 2000 2

... kompilera och kör Kompilera >javac MyFirstProgram.java Då genereras en körbar fil MyFirstProgram.class Kör genom att starta Javas virtuella maskin med program/klassnamnet som argument >java MyFirstProgram Mitt första program! Regeln är att klassens static void main-metod alltid exekveras previous next 5 Kallas också för medlemmar Ett "Javaprograms" struktur En klass ser ut på följande sätt public class KlassNamn extends SuperKlassNamn{ attribut (instans- och klassvariabler) metoder (instans- och klassmetoder) konstruktörer En metod modifierare returtyp funktionsnamn(argument){ programsatser previous next 6 Björn Eiderbäck 2000 3

instansvariabler metoder konstruktörer Konstruera klass Klassnamn = filnamn En klass skall ha samma namn som den fil den placeras i Klassen Circle i filen Circle.java En fil kan innehålla flera klasser men bara en av dem kan vara deklarerad public, Det är den publika klassens namn som motsvarar filens Definition av klass, mall public class KlassNamn extends SuperKlassNamn{ Modifierare TypIvar1 ivar1; Modifierare MetodTyp metod1(typarg1 arg1) { public KlassNamn() { previous next 7 Deklarera och instansiera Deklaration av instans KlassNamn variabelnamn; Instansiering variabelnamn = new KlassNamn(); alternativt, både deklaration och instansiering på en gång KlassNamn variabelnamn = new KlassNamn(); previous next 8 Björn Eiderbäck 2000 4

Kompilera och köra Environmentvariabel För bekväm hantering sätt path (se systemdokumentation) så att kompilator, virtuell maskin och bibliotek enkelt hittas Plattformsberoende hur detta går till Kompilera med javac filnamn javac KlassNamn.java om allt går bra skapas då en fil med namnet KlassNamn.class Kör med java klassnamn java KlassNamn previous next 9 Typer I Java måste alla variabler och metoder deklareras med typ Typ variabel; Det finns primitiva typer som int, char, float och boolean int x; En variabel kan ges ett initialt värde vid deklarationen int x = 10; Man kan också använda typer som är implementerade som vanliga klasser String course = "O2R"; previous next 10 Björn Eiderbäck 2000 5

Modifierare En modifierare kan användas för att ange vilka objekt som kan accessa en klass eller dess medlemmar (dvs dess attribut eller metoder), mest grundläggande är: static indikerar att medlemmen är klassvariabel eller klassmetod public medlemmen är accessbar överallt där dess klass är accessbar protected medlemmen endast accessbar i klassen, dess subklasser eller i aktuellt package (vi återkommer till package vid senare tillfälle) private medlemmen endast accessbar i den klass som definierar den ingen modifierare accessbar av andra klasser i samma paket previous next 11 Exempel public class BankAccount{ protected int balance = 0; public void deposit (int amount) { balance = balance + amount; public void withdraw (int amount) { balance = balance - amount; public int balance (){ return balance; previous next 12 Björn Eiderbäck 2000 6

... BankAccount account1, account2; int transfer; account1 = new BankAccount(); account2 = new BankAccount(); account1.deposit(200); account2.deposit(100); transfer = 75; account1.withdraw(transfer); account2.deposit(transfer); account2.balance(); // resultat 175 previous next 13 Klasser En klass och dess metoder skrivs i en enda fil med samma namn som klassen En fil kan innehålla både klass som används av andra klasser och hjälpklasser, s.k. inre klasser En klass kan vara public, dvs åtkomlig för alla, protected, dvs endast åtkomlig för klasser i samma paket eller subklasser, paketåtkomstbar, dvs endast åtkomlig av andra klasser i samma paket eller slutligen private, dvs bara åtkomlig av klasser i dess omedelbara omgivning (~fil) previous next 14 Björn Eiderbäck 2000 7

Interface Ett interface beskriver API-et för en viss grupp av klasser (som deklarerar att dom implementerar detta gränssnitt) Ett interface placeras, precis som en klass, i en fil med samma namn som interfacet med suffixet.java kompileras med javac för att generera en.class-fil Ett interface deklarerar endast metodapier (och eventuellt konstanter) Motsvarar en pure abstract class i C++ previous next 15 Trådar En tråd, lättviktsprocess eller exekveringsomgivning är en viss sekvens av kontroll inom ett program Program med två trådar I Java skapas en tråd som antingen subklass till klassen Thread eller genom att implementera gränssnittet Runnable i båda fallen skrivs en metod run som definierar vad som skall göras i tråden previous next 16 Björn Eiderbäck 2000 8

relevanta delar av Thread samt Runnable Subklassa Thread eller implementera Runnable Beskriva egen tråd genom att subklassa Thread class MyThread extends Thread { public void run() { //Här beskriver vi vad som skall göras så länge tråden "lever" //ofta en while-loop med stoppvillkor Thread run(): void MyThread run(): void «interface» Runnable run(): void previous next 17 Exempel Alternativ notation för att visa att Thread implementerar Runnable Runnable public class MyThread extends Thread { public void run() { int x = 0; while(x < 100) { System.out.println("x: " + x); x++; Thread MyThread Vi testar tråden, dvs startar via meddelandet start MyThread mythread = new MyThread(); mythread.start(); previous next 18 Björn Eiderbäck 2000 9

... trådar med Runnable I många fall fungerar det inte att subklassa Thread utan vi vill kanske ha en annan superklass Då kan vi istället implementera Runnable «interface» Runnable run() MyRunnable run() public class MyRunnable implements Runnable { public void run() { int x = 0; while(x < 100) { System.out.println("x: " + x); x++; previous next 19... och testar genom att starta en instans av vår klass via klassen Thread relevanta delar av Thread Thread target : Runnable run(): void Thread(Runnable r) if (target!= null) { target.run(); target = r; Thread wrappingthread = new Thread(new MyRunnable()); wrappingthread.start(); Vi ser på fler exempel från Suns tutorial om trådar previous next 20 Björn Eiderbäck 2000 10

Uppdatering av gemensam resurs Antag att vi har följande program (beskrivet med ett aktivitetsdiagram) Ge värden för a, b, c och d m1 = max(a, b); m2 = max(c, d); m = max(m1, m2); Här har det ingen betydelse om m1 eller m2 beräknas först då satserna disjunkta previous next 21... med tidsberoende beteende Om vi istället betraktar följande program j = 10; j.print(); j = 100; Så är resultatet (utskriften via print) beroende av vilken av grenarna som utförs först previous next 22 Björn Eiderbäck 2000 11

Bankkonto med flera trådar kan ge problem BankAccount int balance = 0 deposit(int amount) withdraw(int amount) b1 = balance; balance = b1 + amount; b2 = balance; balance = b2 - amount; vi initierar kontot (sätter in 500) account.balance = 500 Tråd 1 //visa kontohavare1 balansen account.balance.display() //kontohavare1 tar ut belopp account.withdraw(100) // visa hur mycket som finns på kontot account.balance.display() Tråd 2 //visa kontohavare2 balansen account.balance.display() //kontohavare2 sätter in belopp account.deposit(200) // visa hur mycket som finns på kontot account.balance.display() previous next 23 Möjlighet 1 Bankkonto och flera trådar, problem Om flera trådar samtidigt har möjlighet att uppdatera bankkontot så får vi tidsberoende resultat Beroende av ordning kommer kontot nu ha 400, 600 eller 700 Tråd1 Tråd2 b1 b2 balance b1 = balance 500 500 b2 = balance 500 balance = b2 + 200 700 balance = b1-100 400 Möjlighet 2-3 (samma resultat om tråd 2 först) Tråd1 Tråd2 b1 b2 balance b1 = balance 500 500 balance = b1-100 400 b2 = balance 400 balance = b2 + 200 600 Möjlighet 4 Tråd1 Tråd2 b1 b2 balance b1 = balance 500 500 b2 = balance 500 balance = b1-100 400 balance = b2 + 200 700 previous next 24 Björn Eiderbäck 2000 12

Kritiska regioner I bankkontoexemplet kan vi identifiera kritiska regioner som måste exekveras tillsammans Både kodkroppen i withdraw och deposit är kritiska regioner Kritisk region b1 = balance; balance = b1 + amount; b2 = balance; balance = b2 - amount; vi vill skydda kritisk region en process i taget i regionen ingen annan process ska få komma in om någon annan redan där helst skall ingen process behöva vänta i det oändliga på att komma in previous next 25 Mutex Kritiska regioner kan skyddas med olika tekniker för inbördes exklusiv exekvering (mutexbegin/mutexend) Man använder lås innan man exekverar kritisk region och släpper det när man är klar med kodavsnittet Man kan skydda med semafor monitor brevlåda mutexbegin; b1 = balance; balance = b1 + amount; mutexend; Vi kommer titta närmare på monitorer, semaforer och relaterade tekniker previous next 26 Björn Eiderbäck 2000 13

Dekkers algoritm En implementation av mutexbegin/mutexend av den Holländska matematikern Dekker mutexbegin: need(me) = true; while(need(other)) { if(turn!= me) { need(me) = false; while(turn!= me); need(me) = true; mutexend: need(me) = false; turn = other; previous next 27... Korrekt Men hopplös komplicerad om vi har fler än två processer använder busy-wait vilket vi också vill undvika previous next 28 Björn Eiderbäck 2000 14

Monitorer En monitor är ett objekt som kan fungera som ett staket runt kritisk data En monitor används för att låsa en viss kritisk region. Medan kodsekvens/objekt finns i monitorn kan ingen annan exekvera denna region/del av objektet previous next 29 Exklusiv exekvering av delar av objekt I Java finns en inbyggd konstruktion för att hantera kritiska regioner Om man använder nyckelordet synchronized antingen i en metoddeklaration synchronized void metod() { //... eller genom att låsa ett objekt i ett visst kodblock //... synchronized(lockobject) { //... previous next 30 Björn Eiderbäck 2000 15

... Det förstnämnda fallet är ekvivalent med att skriva void metod() {synchronized(this) { //... Vad som händer är att alla synkroniserada kodavsnitt placeras i en monitor för objektet i vilket bara en tråd i taget kan befinna sig Dvs alla synchronized-deklarerade metoder och kodavsnitt låses Andra metoder och kodavsnitt är inte låsta previous next 31 Bankkonto med flera trådar: lös problemet med synchronized En En enkel lösning på på problemet är är att att använda synchronized i i dom kritiska regionerna BankAccount int balance = 0 deposit(int amount) withdraw(int amount) synchronized(this) { b1 = balance; balance = b1 + amount; synchronized(this) { b2 = balance; balance = b2 - amount; Nu Nu kommer dom kritiska regionerna köras odelade och endast en en av av regionerna kan köras i i taget previous next 32 Björn Eiderbäck 2000 16

...bankkonto Enklast är att deklarera metoderna som synkroniserade public class SynchronizedBankAccount1{ protected int balance = 0; public synchronized void deposit (int amount) { balance = balance + amount; public synchronized void withdraw (int amount) { balance = balance - amount; public int balance (){ return balance; previous next 33...bankkonto alternativ med subklass Alternativt skulle vi kunna subklassa och skriva över dom metoder som behöver synkroniseras public class SynchronizedBankAccount2 extends BankAccount{ public synchronized void deposit (int amount) { super.deposit(amount); public synchronized void withdraw (int amount) { super.withdraw(amount); Metoder som inte är synkroniserade i superklasser kan skrivas över i subklass och samtidigt deklareras som synkroniserade previous next 34 Björn Eiderbäck 2000 17