PROCESSPROGRAMMERING Föreläsning 4 - 17.9.2010‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.

Slides:



Advertisements
Liknande presentationer
Utveckla en applikation Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Advertisements

Avlusning Debugger (”avlusare”) Breakpoints Watch.
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Fortsättningskurs i Programmering lektion 3 Johan Hjerling
Fortsättningskurs i Programmering lektion 6
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Metoder i java Det finns två typer av metoder i java
Abstract & sealed.
Polymorfism.
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Programkodens uppbyggnad
Att programmera i språket Java
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 8 Appletprogram/fristående grafiska program Rita linjer, rektanglar mm Skriva text Byta färg Appletprogram html.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Alice in Action with Java
Objektorienterad programmering i Java
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.
Klasser och objekt Klasser, objekt och instansvariabler
Föreläsning 5. Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
int res2=Math.max(tal1,tal2);
Datasamlingar och generiska enheter
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
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmeringsteknik för Media1 & K1
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Att designa parallella program - manuell vs. automatisk parallellisering - Java och ”multi-core”
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 -
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer.
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.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Next previous Innehåll Del 1-trådar Del 2-URLer Del 1: Trådar Föreläsning 8.
Föreläsning 10 Stränghantering.
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.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
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.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Introduktion till programmeringsspråket Java -Den allmänna.
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
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.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
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.
OOP&M - teori1 OOP del III–vecka 15 Mer NetBeans MouseEvent Graphics Threads TIJ Chapter 14 Menus sid Drawing File Dialogs
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
RMI Av: Josefina & Sarah DS04.
Presentationens avskrift:

PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor och ExecutorService)‏

Högnivå objekt för trådprogrammering Vi har hittils tittat på lågnivå APIn för trådprogrammering som funnits inbyggda i Java platformen nästan sedan första början. Trådprogrammering med lågnivå API är lämpligt för mindre program som inte har så många samtidigt exekverande trådar. Att skapa ett ny tråd via ett Thread objekt är dock relativt resurskrävande eftersom det innebär en interaktion med operativsystemet. Av den orsaken lönar det sej att använda sej av en annan lösning vid programmering av program som behöver skapa massvis med kortlivade trådar.

Högnivå objekt för trådprogrammering Högnivå objekt för samtidighet ”concurrency” har funnits med i Java plattformen sedan 5.0 Dessa högnivåobjekt är resurssnålare än ”lågnivåtrådhantering” och klarar också av att utnyttja dagens multi-processor system. Användning av högnivå objekt för programmering av samtidighet innebär i praktiken användning av trådgrupper (”thread pools”)‏

Trådgrupper En trådgrupp består av ett antal inaktiva trådar som är redo att exekvera när som helst. När en ny tråd behövs i ett program skapar man och startar inte en ny tråd utan man ger ett Runnable objekt till trådgruppen vartefter en av de inaktiva trådarna aktiveras och anropar run-metoden. När run-metoden returnerar (avslutas= stängs inte tråden av utan den hänger kvar som inaktiv och väntar på följande anrop.

Trådgrupper En vanlig typ av trådgrupp som användes är fasta trådgrupper (”fixed thread pools”) Denna trådgruppstyp har alltid ett specifikt antal inaktiva trådar som är redo för exekvering. Uppgifter som skall utföras försätts i en kö om alla trådar i trådgruppen är upptagna. En fördel med att använda en fast trådgrupp är att det hindra ett program som använder sej av en massa trådar från att krascha (tänk dej en web-server applikation)

Exekverare Trådgrupper kan användas via en viss typ av objekt som kallas för exekverare (”executors”)‏ Java definierar bl.a. gränssnitten, Executor och ExecutorService, som stöder användning av trådgrupper Låt oss börja med att titta på gränssnittet Executor. Gränssnittet Executor erbjuder en ända metod: execute()‏ Med denna metod kan man ta i bruk en inaktiv tråd i en trådgrupp.

Exekverare: Executor Om r är ett Runnable objekt skapade man en ny tråd enligt lågnivåmodellen så här: th = new Thread(r); th.start(); Vid användning av executors kan koden ovan ersättas med (e är ett objekt av en Executor): Executor):e.execute(r); Kodraden ovan är egentligen ganska odefinierad. Vi har berättat att vi vill exekvera koden i run-metoden av ett Runnable objekt i en tråd men har inte berättat hurdan typ av tråd.

Exekverare : Executor Med execute-metoden kan man också köra en uppgift i en egen skapad tråd. Men vi vill nu kanske hellre använda oss av en tråd ur en trådgrupp för att göra ett effektivt program. Java definierar en klass Executors som har ett antal statiska metoder för att skapa trådgrupper: trådgrupper:newCachedThreadPoosnewFixedThreadPoolnewSingleThreadExecutornewScheduledThreadPoolnewSingleThreadScheduledExecutor Se Java API dokumentationen för närmare info:

Exekverare : Executor Man måste alltså börja med att skapa en trådgrupp. En trådgrupp med ett fast antal trådar kan man skapa m.h.a. den statiska metoden newFixedThreadPool() i klassen Executors: Executors.newFixedThreadPool(int nThreads); ExecutorService = En typ av Executorgränssnitt nThreads= Maxantalet trådar i trådgruppen Returnerar= Ett objekt av ett trådgränssnitt (Executor/ExecutorService)‏

Exekverare : Executor Exempel: Skaper en trådgrupp på max 10 trådar och för över en uppgift till en tråd i trådgruppen class trad implemnts Runnable { public void run()‏ { System.out.println(”Jag är en tråd!”); }... Executor tradgrupp = Executors.newFixedThreadPool(10) ; tradgrupp.execute(new Runnable()); }

Exekverare: ExecutorService Gränssnittet ExecutorService erbjuder mera möjligheter när det gäller trådhantering än gränssnittet Executor Några av metoderna i gränssnittet ExecutorService: submit()= Används för att överföra koden i run-metdoen av ett Runnable ojbket till en tråd i en tidigare skapad trådgrupp shutdown() =Stänger en trådgrupp. Tillåter uppgiter som redan är skickade till trådgruppen att exekvera färdigt men nya trådar får inte längre aktiveras med submit(). shutdownNow() =Stänger av alla aktiva exekverande uppgifter i trådgruppen och stoppar även kön för väntande uppgifter. Returnerar en lista på de uppgifter som väntade på att få exekvera.

Exekverare : ExecutorService Mera detaljer om metoden submit(): Future submit(Runnable task)‏ Future submit(Runnable task, T result)‏ Submit() är en överlagrad metod med bl.a. ovannämnda två alternativ. Båda alternativen tar ett Runnable objekt som parameter och returnerar ett Future – objekt. Future-objetet kan användas för att kolla olika statusinfo om den exekverande uppgiften, Se:

Exekverare : ExecutorService Principen för användning av trådgrupper m.h.a. Gränssnittet ExecutorService är följande: Anropa en metod, t.ex. newFixedThreadPool i klassen Executors för att skapa en trådgrupp Anropa submit för att överföra en uppgift (koden i run-metoden av ett Runnable- objekt) till en tråd i den skapade trådgruppen Om du vill t.ex. kolla statusinfo eller avbryta en uppgift använd Future-objektets metoder. Anropa shutdown() när du inte längre kommer att submittera uppgifter till trådgruppen, m.a.o. Trådgruppen behövs ej längre

Exekverare : ExecutorService Future-objektets metoder är: Cancel()= Försöker avbryta en uppgift i denna tråd Get()= Väntar på att tråden skall avslutas och om tråduppgiften (run-metoden) returnerar ett värde tas det emot i den formen som specifiserats mellan <> isCancelled()=Returnerar true om uppgiften avbröts före den blev klar isDone() =Returnerar true om uppgiften i en tråd är klar