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

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

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

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

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

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

Trådar. Aktiva objekt

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Exam Concurrent and Real-Time Programming

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

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Tentamen Nätverksprogrammering Lösningsförslag

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

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

Tentamen Lösningar EDA698 Realtidssystem

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Parallellism, återblick

Tentamen Nätverksprogrammering Lösningsförslag

9 Aktiva objekt och trådar

Tentamen Programmering fortsättningskurs DIT950

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Föreläsning 11. Trådar

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

TENTAMEN OOP

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

Tentamen Nätverksprogrammering Lösningsförslag

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

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

Klasser som datastrukturer

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

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

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

Lösningsförslag till tentamen

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

LÖSNINGSFÖRSLAG

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

JAVAUTVECKLING LEKTION 4

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Del A (obligatorisk för alla)

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

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

Lösningsförslag till tentamen

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

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

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

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

TENTAMEN OOP

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

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

Tentamensskrivning Nätverksprogrammering (EDA095 - FED) , kl 8-13

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

Objektorienterad Programkonstruktion. Föreläsning dec 2015

OOP Objekt-orienterad programmering

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

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

OOP Tenta

TDDC77 Objektorienterad Programmering

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Språkkonventioner och redigering av tal.

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

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

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

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

Tentamen, EDAA20/EDA501 Programmering

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

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Föreläsning 3-4 Innehåll

TDDD78 Viktiga begrepp, del 2

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

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

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 4

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

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

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

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

DAT043 Objektorienterad Programmering

Classes och Interfaces, Objects och References, Initialization

Tentamen. Lösningsförslag

Tentamen EDA698 Realtidssystem (Helsingborg)

OOP Objekt-orienterad programmering

Den som bara har en hammare tror att alla problem är spikar

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Transkript:

Concurrency Saker händer samtidigt Hur gör vi flera saker samtidigt på en dator? - Dela på en CPU - Flera CPU Flera processer på en dator. Operativsystemet (OS) tilldelar dem körtid (time slices, prioritet) Process En instans av ett program - virtual address space - kod - program counter: vilken instruktion ska köras - data (minne, register) - data (stack) - anropasstack Tråd Sekventiellt kontrollflöde i en process - program counter - data (register, stack) - anropsstack

Trådar i Java 1. Subklass till Thread, överlagra run() 2. Implementera Runnable (samma resultat, annan struktur) public class MyThread extends Thread { public MyThread(String str) { super(str); public void run() { for (int i = 0; i < 5; i++) { System.out.println(getName()+ : +i); try { sleep((long)(math.random() * 1000)); catch (InterruptedException e) { System.out.println(getName()+ : done! ); public class TwoThreadsDemo { public static void main (String[] args) { new MyThread("A").start(); new MyThread("B").start();

public class Clock implements Runnable { boolean running=true; // use flag so we can stop public void run() // we get here after start { while(running) { // get the time and convert it to a date Calendar cal = Calendar.getInstance(); Date date = cal.gettime(); // format it and display it (just println) System.out.println(date); try { Thread.sleep(200); catch (InterruptedException e) { running = false; // end while public class RunnableDemo { public static void main (String[] args) { Thread a = new Thread(new Clock(),"A").start(); Thread b = new Thread(new Clock(),"B").start(); try { Thread.sleep((long)(Math.random()*1000)); catch (InterruptedException e) { a.interrupt(); b.interrupt();

När ska man använda Thread och Runnable? Om du måste subklassa någon annan klass använd Runnable. Om det blir enklare med Thread använd den. En tråd tilldelas resurser och körtid av OS när start() anropas. En tråd får ingen körtid om den - Sover (Thread.sleep) - Väntar (Object.wait() - Object.notify()) - IO-blockerad (läs från Socket) - Avstår (Thread.yeild()) Prioritet - Preemptive (avbryter och återupptar körning av trådar, context switch) - Högst först, samma prio får samma tid - Undviker starvation att någon aldrig får körtid - Ärvs från skapande tråd - Thread.setPriority() - Thread. MAX/MIN_PRIORITY

Synkronisering Trådar kan köra samma kod samtidigt Kan ge oväntade resultat pga. delat minne Svårt att hitta fel! Exempel: public void percent(double percent) { double localvalue = this.value; localvalue = localvalue * percent / 100.0; this.value = localvalue; Value = 100 Tråd 1: Sätt till 20% av 100 = 20 Tråd 2: Sätt till 10% av 20 = 2 Möjligt scenario: Tråd 1: localvalue blir 100 Tråd 2: localvalue blir 100 Tråd 1: localvalue blir 20 Tråd 2: localvalue blir 10 Tråd 1: value blir 20 Tråd 2: value blir 10 Fel!

Lösning: synkronisera metoden public synchronized void percent(double percent) Ingen annan tråd får använda en synkroniserad metod på objektet samtidigt Synkronisering använder mycket systemresurser Synkronisera en del av en metod på vilket objekt som helst: private ArrayList<Integer> list = new ArrayList<Integer>(); public void add(int value) { if (value < 0) throw new RuntimeException( value < 0 ) synchronized (list) { list.add(value);

public class Producer extends Thread { private Box box; public Producer(Box b) { box = b; public void run() { for (int i=0; i<10; i++) { box.put(i); System.out.println("Produced "+i); try { sleep((int)(math.random() * 100)); catch (InterruptedException e) { public class Consumer extends Thread { private Box box; private String name; public Consumer(Box b, String name) { box = b; this.name = name; public void run() { int x = 0; for (int i=0; i<5; i++) { x = box.get(); System.out.println(name+ consumed +x);

public class Box { private int value; private boolean available = false; public synchronized int get() { while (available == false) { try { // wait for Producer to put value wait(); catch (InterruptedException e) { available = false; int v = value; // notify Producer that value is consumed notifyall(); return v; public synchronized void put(int v){ while (available == true) { try { // wait for Consumer to get value wait(); catch (InterruptedException e) { value = v; available = true; // notify Consumers that value has been set notifyall();

public class ProducerConsumerTest { public static void main(string[] args) { Box b = new Box(); Producer p1 = new Producer(b); Consumer c1 = new Consumer(b, A ); Consumer c2 = new Consumer(b, B ); p1.start(); c1.start(); c2.start(); Trådar som väntar - sleep() går ej att avbryta - wait() väntar på notify() - wait(long t) väntar max t millisek på notify() - notify() en tråd som väntar får köra - notifyall() alla trådar som väntar får köra

Deadlock alla trådar väntar på varandra Svårt att upptäcka så undvik! Exempel: Tråd A tar brödet Tråd B tar smöret Tråd A väntar på smöret Tråd B väntar på brödet Lösning: Tråd som misslyckas att få en resurs ger upp sin egen resurs. Låt alla trådar ta resurser i samma ordning Starvation En tråd blir alltid utan resurser. Java undviker detta till stor del.