Jonny Karlsson 25.3.2008 PROCESSPROGRAMMERING Föreläsning 8 (25.3.2008) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

Avlusning Debugger (”avlusare”) Breakpoints Watch.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Namngivna rörledningar -Signaler -Signalhantering.
Funktioner och programorganisation
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
OOP Objekt-orienterad programmering
Polymorfism.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Att programmera i språket Java
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 ITK:P1 Föreläsning 5 Iteration, slumpning och arrayer DSV Peter Mozelius.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
PROCESSPROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
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.
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
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 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
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 -
Utveckling med ramverket .net
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: - Förening av dataströmmar - Signaler - Signalhantering.
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.
Modulär programutveckling
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
1 Windows programmering Programmering med Threads Borland C++ Builder 4 Modsoft Ab Kent Westerholm.
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.
Föreläsning 14 ”Enkel” Filhantering.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
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 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 5 ( ) Innehåll: -Signaler -Signalhantering.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska operatorer och logiska uttryck -Referenstyper.
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.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
INTRODUKTION TILL PROGRAMMERING
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Anders Sjögren Deklarationsområde och funktioner.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 9 ( ) Innehåll: - IPC: Semaforer.
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.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Programmeringsteknik för K och Media
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.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
KPP053, HT2015 MATLAB, Föreläsning 4
Presentationens avskrift:

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() - Synkronisering

Jonny Karlsson Avbrott Ett avbrott är en signal till en tråd om att den borde avsluta det den gör just nu. Vanligast är att ett avbrott avslutar en tråd, men det är upp till programmeraren själv vad som skall ske när ett avbrott uppstår. En tråd kan skicka ett avbrott till en annan tråd genom att anropa metoden interrupt() som är definierad i klassen Thread (Se API specificationen).. //skapar och startar en tråd Thread th = new Thread(this); th.start();.. //gör någonting.. //Skickar ett avbrott till tråden th.interrupt();

Jonny Karlsson Avbrott Hur en tråd reagerar på ett avbrott beror på vad tråden gör just vid den tidpunkt ett avbrott uppstår. Om en tråd vid jämna mellanrum anropar metoder som kastar InterruptedException kan trådens run-metod programmeras att returnera genast efter att den fångat upp undantaget:while(true){ //gör något..try{Thread.sleep(1000);} catch(InterruptedException e) { //Denna tråd blev avbruten return 0; }}

Jonny Karlsson Avbrott Många metoder som kastar InterruptedException (t.ex. sleep()) är designade på ett sådant sätt att de avbryter sin nuvarande funktion och returnerar genast när ett avbrott tagits emot. Om en tråd utför någonting för en lång tid utan att anropa en metod som kastar InterruptedException måste den periodvis kolla om den blivit avbruten för att kunna stöda avbrott. Metoden interrupted() i klassen Thread returnerar true om innevarande tråd har tagit emot ett avbrott.

Jonny Karlsson Avbrott Exempel:while(true){System.out.println(”HelloWorld!!!!!”);if(Thread.interrupted()){ System.out.println(”Denna tråd tog emot ett avbrott!!”); return;}} Koden ovan helt enkelt returnerar och avslutar tråden om den tar emot ett avbrott.

Jonny Karlsson Avbrott Avbrottsmekanismen är implementerad genom att använda en flagga: interrupt status. När man anropar metoden interrupt() aktiveras flaggan interrupted status för den tråd man utförde interrupt() på. När en tråd kollar om den blivit avbruten med Thread.interrupted() kontrolleras det om flaggan är aktiverad eller ej och om den är aktiverad så kommer flaggan igen att bli inaktiv.

Jonny Karlsson Avbrott En tråd kan kontrollera om en annan tråd har tagit emot ett avbrott eller ej med metoden isInterrupted(): if(trad.isInterrupted()) //tråden trad har tagit emot ett avbrott else//tråden trad är fortfarande aktiv OBS! isInterrupted() ändrar inte statuset på flaggan interrupted status.

Jonny Karlsson Metoden join() Metoden join (definierad i klassen thread) tillåter en tråd att vänta på att en annan tråd skall avsluta sin exekvering. Exempel:... //trad är en tråd som för tillfället exekverar trad.join()... I koden ovan ställs innevarande tråd in att vänta på att tråden trad skall avslutas innan den fortsätter sin egen exekvering.

Jonny Karlsson Synkronisering Trådar kommunicerar sinsemellan främst via gemensamma globala variabler. Denna typ av kommunikation är effektiv eftersom inget data behöver fysiskt skickas mellan två eller flera trådar. Kommunikation mellan trådar via gemensamma variabler kan dock ge upphov till två olika typer av problem/fel: Trådkollision (”thread interference”) Minneskonsekvensfel (”memory consistency error”);

Jonny Karlsson Trådkollision Innebär att två eller flera trådar uppdaterar en gemensam variabel samtidigt. Antag att två trådar inkrementerar en gemensam global variabel med 1. Om två trådar inkerementerar borde värdet i den globala variabeln ha ökat med 2. Men om de båda trådarna råkade inkrementera exakt samtidigt blir slutresultatet att den globala variabeln endast ökat med 1.

Jonny Karlsson Synkroniserade metoder Ett sätt i Java att synkronisera trådar som använder en gemensam global variabel är att använda s.k. synkroniserade metoder (”synchronized methods”) För att göra en metod synkroniserad användar man sej av nyckelordet synchronized vid metoddefinitionen: synchronized void minSynkroniseradeMetod() {}

Jonny Karlsson Synkroniserade metoder Exempel: int raknare = 0; synchronized void inkrementera() {raknare++;} Om flera trådar samtidigt anropar den synkroniserade metoden inkrementera() ovan kommer endast en åt gången in i metoden, övriga pausar sina exekveringar och väntar på att föregående tråd skall bli klar.