Tråder i Java Parallelle programmmer og programbiter

Størrelse: px
Begynne med side:

Download "Tråder i Java Parallelle programmmer og programbiter"

Transkript

1 Oversikt Tråder i Java Parallelle programmmer og programbiter Stei Gjessig, Ist. for iformatikk, Uiv. i Oslo Hva er parallelle programmer? Hvorfor parallelle programmer? Hvorda ka dette skje i e maski med bare e CPU? Noe begreper: Programmer, prosesser og tråder Avbrytbare (pre emptive) eller ikke avbrytbare (o pre emptive) prosesser og tråder. Tråder i Java Hvorda og hvorfor bruker vi tråder Oppdaterigs problemet: Samtidig oppdaterig av data Løsige: Kritiske regioer med sykroiserte metoder. Hva er parallelle programmer - I Hva er parallelle programmer -II På e datamaski ka flere programmer kjøre samtidig: Virkelig samtidig: To programmer får på samme tidspukt utført hver si istruksjo (flere prosessorer) Tilsyelatede samtidig : Maskie skifter så raskt mellom programmee så fort at du ikke merker det (flere gager i sekudet). Maskie utfører da oe få millioer istruksjoer for hvert program før de skyder seg til este program. Uasett om programmee går virkelig eller tilsyelatede samtidig, må de begge behadles som om de går virkelig samtidig (fordi ma ikke ka forutsi år maskie skifter fra et program til et aet) På e Uix-maski (og Widows) ka flere brukere være pålogget og kjøre sie programmer samtidig Datamaskie ka også skifte rask mellom de ulike programmee hver bruker har som treger å være aktive Eks: Du kjører både et Java-program og sitter samtidig og skriver et brev i Word Admiistrasjoe av hvem som kjører, og hvorda de deler tide mellom seg, gjøres av operativsystemet (Uix eller Widows). Operativsystemet er et meget stort program og er det første programmet som startes i maskie. Det har alle tillatelser, og skrur f.eks. oe av disse tillatelsee av for adre programmer (eks: skrive direkte til disk).

2 Hvorfor parallelle programmer? Hvorda ka dette skje i e maski med bare e CPU? Maskie har mye større kapasitet e det vi valigvis treger; går for det mest på tomgag. Mi PC har mer e 99% av CPU-tide kjørt tomgagsprogrammet ( the System Idle Process ) siste uke. Mage valige PC-er har to prosessorer E bruker treger å kjøre flere programmer samtidig. Ofte må mage ulike brukere jobbe på samme data samtidig (eks. et bestilligssystem med flere brukere på samme data : e kio, e flyavgag,...) Skille mellom e maski med flere prosessorer og flere maskier som sammarbeider tett (tett koblig) er i ferd med å viskes ut. Operativsystemet bestemmer hele tide hvilket av de mage programmee som er klare til å kjøre, skal kjøres. Operativsystemet skifter til ytt program: Det kommer oe data utefra (tastatur, mus, disk, ett) De iebygde klokka gir avbrudd (50 gager i sekudet) Da vekkes operativsystemet opp og overtar kotrolle fra det programmet som kjørte. Så bestemmer operativsystemet rettferdig hvilket program som så skal overta og kjøre litt: De med høyest prioritet må slippe til oftest og mest Ige må vete alt for lege (rettferdighet fairess ) Dersom itet program øsker å kjøre, har operativsystemet e ege tomgagsprosess som ka kjøre (går bare rudt i e tom løkke, the system idle process). Flere CPU-er / prosessorer /maskier Det er tre faktorer som avgjør prise: volum, volum og volum.

3 Programmer, prosesser og tråder Hvorfor fat ma på tråder? Operativsystemet admiistrerer Prosesser (og et atall tråder i hver prosess) Prosesser Er isolert fra hveradre, ka i utgagspuktet bare sakke til operativsystemet Ka sede meldiger til adre prosesser via operativsystemet Eier hver si del av hukommelse Eier hver sie filer,.. Hver eies av e bruker (eller op.sys) Et program Startes som é prosess (ka så evt. starte adre prosesser eller tråder) E tråd Er parallelle eksekveriger ie i é prosess Alle tråder i e prosess, deler prosesses del av hukommelse (ser samme variable og programkode) Tråder er som små -prosesser ie i e prosess Vi har prosesser hvorfor ikke bare bruke dem? Det går greit, me litt tregt Å skifte fra at e prosess kjører til at e ae kjører tar omlag istruksjoer Prosesser ble fuet på omlag 1960, tråder mist 20 år seiere. Tråder er som små prosesser ie i é prosess, og det er lagt rasker å skifte fra e tråd til e ae tråd. Prosesser kommuiserer valigvis via operativsystemet Tråder kommuiserer via data i samme prosess Ellers har tråder og prosesser omlag samme muligheter og problemer år ma lager programmer Parallellprogrammerig = bruke flere prosesser og/eller flere tråder for å løse e programmerigsoppgave Programmer med tråder er vaskeligere å skrive og teste/feilsøke e bare é tråd i é prosess (som dere grovt sett har gjort til å) Tråder i Java Er iebygget i språket I ethvert program er det mist é tråd (de som starter og kjører mai) Fra dee tråde ka vi starte flere adre, ye tråder E tråd starter ete som: Et objekt av e subklasse av class Thread som ieholder e metode ru() som du skriver i subklasse. Slik gjør du: Lager først objektet av subklasse (ew...) Kaller så metode start() i objektet (ikke laget av deg, me arvet fra Thread). start() sørger for at ru(), som du har skrevet, vil bli kalt. Et objekt av e klasse som implemeterer et gresesitt Ruable Se læreboka litt ae oppstart, me ellers samme oppførsel etterpå. public class Restaurat { it atbestilt; it atlaget = 0, atservert = 0; // tallerkerertter it atkokker = 5, atservitører = 50; Restaurat(it at) { atbestilt at; for (it i 0; i < atkokker; i++) { Kokk k = ew Kokk(this, "Kokk r. " + i); k.start(); for (it i = 0; i < atservitører; i++) { Servitor s = ew Servitor(this, "Servitør r. " + i); s.start(); public static void mai(strig[] args) { ew Restaurat(Iteger.parseIt(args[0])); sychroized boolea kokkferdig() { retur atlaget == atbestilt; sychroized boolea servitørferdig() { retur atservert == atbestilt; sychroized boolea puttallerke(kokk k) { // Kokketråde blir eier av låse. while (atlaget - atservert > 2) { /* så lege det er mist 2 tallerker * som ikke er servert, skal kokke vete. */ wait(); /* Kokketråde gir fra seg låse og sover til de catch (IterruptedExceptio e) { // Kokketråde blir igje eier av låse boolea ferdig = kokkferdig(); if (!ferdig) { atlaget++; System.out.pritl(k.getName() + " laget r: " + atlaget); otify(); /* Si ifra til servitøre. */ retur!ferdig; sychroized boolea gettallerke(servitor s) { // Servitørtråde blir eier av låse. while (atlaget == atservert &&!servitørferdig()) { /* så lege kokke ikke har plassert e y tallerke. Dermed skal * servitøre vete. */ wait(); /* Servitørtråde gir fra seg låse og sover til de catch(iterruptedexceptio e) { // Servitørtråde blir igje eier av låse. boolea ferdig = servitørferdig(); if (!ferdig) { atservert++; System.out.pritl(s.getName() + " serverer r: " + atservert); otify(); /* si ifra til kokke */ retur!ferdig; class Kokk exteds Thread { Restaurat rest; Kokk(Restaurat rest, Strig av) { super(av); // Dee tråde heter å <av> public void ru() { while (rest.puttallerke(this)) { // levert tallerke. sleep((log) (1000 * Math.radom())); catch (IterruptedExceptio e) { // Kokke er ferdig class Servitor exteds Thread { Restaurat rest; Servitor(Restaurat rest, Strig av) { super(av); // Dee tråde heter å <av> public void ru() { while (rest.gettallerke(this)) { sleep((log) (1000 * Math.radom())); catch (IterruptedExceptio e) { // Servitøre er ferdig!"# public class Restaurat { it atbestilt; it atlaget = 0, atservert = 0; // tallerkerertter it atkokker = 5, atservitører = 50; Restaurat(it at) { atbestilt at; for (it i 0; i < atkokker; i++) { Kokk k = ew Kokk(this, "Kokk r. " + i); k.start(); for (it i = 0; i < atservitører; i++) { Servitor s = ew Servitor(this, "Servitør r. " + i); s.start(); public static void mai(strig[] args) { ew Restaurat(Iteger.parseIt(args[0])); sychroized boolea kokkferdig() { retur atlaget == atbestilt; sychroized boolea servitørferdig() { retur atservert == atbestilt; sychroized boolea puttallerke(kokk k) { // Kokketråde blir eier av låse. while (atlaget - atservert > 2) { /* så lege det er mist 2 tallerker * som ikke er servert, skal kokke vete. */ wait(); /* Kokketråde gir fra seg låse og sover til de catch (IterruptedExceptio e) { // Kokketråde blir igje eier av låse boolea ferdig = kokkferdig(); if (!ferdig) { atlaget++; System.out.pritl(k.getName() + " laget r: " + atlaget); otify(); /* Si ifra til servitøre. */ retur!ferdig; sychroized boolea gettallerke(servitor s) { // Servitørtråde blir eier av låse. while (atlaget == atservert &&!servitørferdig()) { /* så lege kokke ikke har plassert e y tallerke. Dermed skal * servitøre vete. */ wait(); /* Servitørtråde gir fra seg låse og sover til de catch(iterruptedexceptio e) { // Servitørtråde blir igje eier av låse. boolea ferdig = servitørferdig(); if (!ferdig) { atservert++; System.out.pritl(s.getName() + " serverer r: " + atservert); otify(); /* si ifra til kokke */ retur!ferdig; class Kokk exteds Thread { Restaurat rest; Kokk(Restaurat rest, Strig av) { super(av); // Dee tråde heter å <av> public void ru() { while (rest.puttallerke(this)) { // levert tallerke. sleep((log) (1000 * Math.radom())); catch (IterruptedExceptio e) { // Kokke er ferdig class Servitor exteds Thread { Restaurat rest; Servitor(Restaurat rest, Strig av) {! super(av); // Dee tråde heter å <av> public void ru() { while (rest.gettallerke(this)) { sleep((log) (1000 * Math.radom())); catch (IterruptedExceptio e) { // Servitøre er ferdig

4 Tråder i Java: class MiTraad exteds Thread public void ru( ) { while (<mer å gjøre>) { <gjør oe>; sleep(<et tall, dvs. e stud>); catch (IterruptedExceptio e) { // ed while // ed ru //ed class MiTraad E tråd lages og startes opp slik: MiTraad traade; traade = ew MiTraad( ); traade.start( ); MiTaad objekt (e tråd) start ru traade ru ieholder valigvis e løkke som utføres til oppgave er ferdig. Mage tråder i parallell $!%%& '()* +"&,-$!&,-$!&.&.,-$!&.% Husk at trådee må både lages og startes,& $!/0&,-$!/0& #,&1&223 /0,-$!& /0.& 4 start( ) er e metode i Thread som må kalles opp for å få startet tråde. start-metode vil igje kalle metode ru (som vi selv programmerer). Sove og våke E tråd ka sove et atall milli- (og ao) sekuder; metode i Thread: static void sleep (log millis) Causes the curretly executig thread to sleep (temporarily cease executio) for the specified umber of millisecods. Adre tråder slipper da til (får kjøre) Når tide er gått skjer et utak: sleep(1000); // sover ett sekud catch (IterruptedExceptio e) { E Klokke som viser sekuder Så mai er også e tråd class Klokke { public static void mai(strig[] args) { I stdi = ew I(); System.out.pritl("Trykk [ENTER] for å starte og stoppe"); stdi.ilie(); // Her lages stoppeklokke-objektet: Stoppeklokke stoppeklokke = ew Stoppeklokke(); // og her settes de ye tråde i gag. stoppeklokke.start(); stdi.ilie(); // veter på lije fra tastaturet stoppeklokke.ed(); class Stoppeklokke exteds Thread { boolea stop = false; // blir kalt opp av superklasses start-metode. public void ru() { it tid = 0; while (!stop) { System.out.pritl(tid++); Thread.sleep(1 * 1000); // ett sekud catch (IterruptedExceptio e) { public void ed() { stop = true;

5 Tråder ka avbryte seg selv Valigvis vil operativsystemet dele prosessore mellom alle aktive tråder (tidsdelig - time-slicig ), og altså kaste e tråd ut av prosessore etter e tid (på egelsk: pre-emptio). ru-metode ka eksplisit la adre tråder slippe til ved å si yield( ); Noe gager det ka være øskelig å la adre aktiviteter komme fora. I visse tilfeller er det til og med ødvedig fordi oe operativsystem ikke klarer å stoppe e tråd og la e ae fortsette (for eksempel klarer Solaris ikke tidsdelig mellom tråder, og Java forlager ikke dette). yield( ); slipper adre tråder til, og lar tråde som utfører yield vete midlertidig (me dee tråde blir igje startet opp år det på y er de si tur). E tråd (Et tråd-objekt) start ru while (!doe) { : : sleep(500); : : yield ( ); : Sove og Vike Tre trafikklys styrt av tre tråder Laget av Judy Bishop i læreboka Java Getly " 5 6* mai JFrame f = ew Traffic(); f class SetOfLights er e idre klasse i class Traffic Her er masse datastruktur og metoder for å tege opp ramme rudt lysee og kappee ederst. actioperformed if (evet == ewsetbutto) { lights[lights] = ew SetOfLights(area, lightspositio); lights[lights].start();. SetOfLights[] lights = ew SetOfLights[3]; SetOfLights objekt (e tråd) start ru while (true) <teg lys> SetOfLights objekt (e tråd) start ru while (true) <teg lys> SetOfLights objekt (e tråd) start ru while (true) <teg lys> Traffic3- klassedatastruktur Traffic3- objekt import java.awt.*; import java.awt.evet.*; public class Traffic3 exteds JFrame implemets ActioListeer, ItemListeer { private JPael area; private it lightspositio = 105; private static fial it lightswidth = 150; private SetOfLights[] lights = ew SetOfLights[3]; private it Lights = 0, setwated = 0; private JTextField duratio; private JComboBox colours; private it light; private JButto ewsetbutto; private JButto walkbutto; private JButto closebutto; Alle data er skjult for omverdee public Traffic3() { super("traffic Lights versio 3 "); getcotetpae().add("north",ew Label ("Savaa Traffic Light Simulatio",Label.CENTER)); area = ew JPael(); area.addmouselisteer(ew MouseEvtHadler()); getcotetpae().add("ceter",area); JPael buttos = ew JPael(); ewsetbutto = ew JButto("New Set"); ewsetbutto.addactiolisteer(this); buttos.add(ewsetbutto); colours = ew JComboBox (); colours.additem("red"); colours.additem("gree"); colours.additem("yellow"); colours.additem("walk"); colours.seteditable(false); colours.additemlisteer(this); light = 0; buttos.add(colours); buttos.add(ew JLabel("Duratio")); duratio = ew JTextField("", 4); duratio.addactiolisteer(this); buttos.add(duratio); walkbutto = ew JButto("Walk"); walkbutto.addactiolisteer(this); buttos.add(walkbutto); closebutto = ew JButto("Close"); closebutto.addactiolisteer(this); buttos.add(closebutto); getcotetpae().add("south",buttos); Et eget objekt som tar seg av museklikk

6 public void itemstatechaged(itemevet e) { Strig s = (Strig) e.getitem(); if (s.equals("red")) {light = 0; else if (s.equals("gree")) {light = 1; else if (s.equals("yellow")) {light = 2; else if (s.equals("walk")) {light = 3; class MouseEvtHadler exteds MouseAdapter { public void mousepressed(mouseevet e) { it = e.getx() / lightswidth; if ( < Lights) setwated = ; Et eget objekt som tar seg av museklikk public static void mai(strig[] args) { JFrame f = ew Traffic3(); f.setsize(450, 210); f.setvisible(true); f.addwidowlisteer(ew WidowAdapter () { public void widowclosig(widowevet e) { System.exit(0); ); // slutt mai E ae måte å sørge for at programmet termierer ormalt Sett de farge som skal foradres Nytt lys Max tre lys Lyttemetode ligger i hoved-objektet: public void actioperformed(actioevet e) { Object evet = e.getsource(); if (evet == ewsetbutto) { lights[lights] = ew SetOfLights(area, lightspositio); lights[lights].start(); lightspositio += lightswidth; Lights++; if (Lights = = 3) ewsetbutto.seteabled(false); else if (evet = = walkbutto) { lights[setwated].walk = true; else if (evet = = duratio) { lights[setwated].time[light]= Iteger.parseIt(duratio.getText()); else if (evet = = closebutto) { for (it i = 0; i<lights; i++) lights[i].stop(); setvisible(false); dispose(); System.exit(0); // slutt actioperformed Trådee class SetOfLights exteds Thread { private it red = 0; private JPael area; private it x; private it light; boolea walk = false; boolea walko = false; it time [] = {500, 500, 500, 500; Tråde(e)s tilstad Kostruere e tråd: public SetOfLights(JPael c, it x) { area = c; this.x = x; Selve tråde(e) public void ru( ) { while (true) { for (it light = 0; light < 3; light++) { if (light == red & walk) { walko = false; for (it i = 0; i < 11; i++) { draw(light); sleep(time[3]); catch (IterruptedExceptio e) { walko =!walko; walk = false; else { draw(light); sleep(time[light]); catch (IterruptedExceptio e) { // slutt while (true) // slutt ru Grø void draw(it light) { Graphics g = area.getgraphics(); g.setcolor(color.black); g.drawoval(x-8, 10, 30, 68); g.setcolor(color.cya); g.fillrect(x-90,10,70,100); g.setcolor(color.black); g.drawstrig(""+time[0], x-70, 28); g.drawstrig(""+time[2], x-70, 48); g.drawstrig(""+time[1], x-70, 68); g.drawstrig(""+time[3], x-70, 98); switch (light) { case 0: g.setcolor(color.red); g.filloval(x, 15, 15, 15); g.setcolor(color.lightgray); g.filloval(x, 35, 15, 15); g.filloval(x, 55, 15, 15); break; case 1: g.setcolor(color.gree); g.filloval(x, 55, 15, 15); g.setcolor(color.lightgray); g.filloval(x, 15, 15, 15); g.filloval(x, 35, 15, 15); break; Rød Gul Her teger tråde ut sitt lys variable light styrer uttegige case 2: g.setcolor(color.yellow); g.filloval(x, 35, 15, 15); g.setcolor(color.lightgray); g.filloval(x, 15, 15, 15); g.filloval(x, 55, 15, 15); break; // slutt case if (light == red & walk) { if (walko) g.setcolor(color.gree); else g.setcolor(color.white); g.filloval(x+1, 85, 14, 14); else { g.setcolor(color.black); g.drawoval(x, 85, 15, 15); // slutt draw // slutt tråd-klasse SetOfLights // slutt class Traffic3 Nytt avsitt: Oppdaterigs problemet: Samtidig oppdaterig av data Løsige: Kritiske regioer med sykroiserte metoder. Først: mer itro og aller ekleste eksempel Så et program som feiler: Flysalg.java Deretter et program som er riktig: Flysalg2.java

7 Felles data F Ekelt eksempel på at to tråder ka ødelegge data. Felles data (grøe felt) må valigvis bare aksesseres (lese eller skrives i) av e tråd om gage. Hvis ikke blir det kluss i dataee. På figure vår er det to områder vi har problemer med (dvs. at to eller flere tråder ka risikere å maipulere data i disse områdee samtidig). Disse to områdee er markert med F (for Felles). Prosess k F Felles data: it peger = 2000; Tråde Ta: it x; x =.peger; x -= 500 ; Tråde Gi: it x; x =.peger; x += 500 ; De adre to områdee ieholder data som vi ete vet at bare e tråd om gage bruker, eller som er slik at det ikke er oe problem om flere tråder bruker det samtidig. Slike resoemeter er imidlertid farlige og ofte feilaktig, derfor er det egetlig best å beskytte alle delte data (som hører samme) som om de ka bli oppdatert samtidig..peger = x; La oss se hva som skjer hvis tråde Ta først utføres litt, og stopper opp ved pile. Deretter overtar tråde Gi, og hele dee tråde utføres ferdig. Til slutt utføres reste av tråde Ta..peger = x; Hva med ekte parallellitet? Felles data: Samme med metoder Felles data: Husk: mye varibale ved hvert medtodekall it peger = 2000; Tråde Ta: Tråde Gi: it peger = 2000; Tråde Ta: Tråde Gi: void ta( ) it x; x = peger; x -= 500 ; peger = x; void gi( ) it x; x =.peger; x += 500 ;.peger = x;.ta( ).gi( ) Trådee utfører metodee ta og gi som om kode ie i metodee var e del av trådees kode. På samme måte som på forrige side ka vi se hva som skjer hvis tråde Ta først utfører metode ta litt, og så stopper opp ved pile. Deretter overtar tråde Gi, og hele dee tråde utføres ferdig (og utfører hele metode gi). Til slutt utføres reste av tråde Ta (metode ta). void ta( ) it x; x = peger; x -= 500 ; peger = x; void gi( ) it x; x =.peger; x += 500 ;.peger = x;.ta( ).gi( ) Vi er jo å eksperter i å vite at hver gag e metode kalles (f.eks ta eller gi) så lages det ege ye variable ie i metode (variable x i ta og x i gi).

8 Vi order opp med kritiske regioer / sykroiserte metoder. Felles data: it peger = 2000; sychroized void ta (it at) it x; x = peger; x -= at ; peger = x; sychroized void gi (it at) it x; x = peger; x += at ; peger = x; Tråde Ta:.ta(500); Tråde Gi:.gi(500); E kritisk regio er e kodebit som utføres ferdig før e ae tråd får lov å utføre e kritisk regio (med hesy på de samme dataee) Metodee i et objekt blir kritiske regioer år det står sychroized fora metodeavee. Høyst é kritisk regio ka utføres ie i et objekt om gage. Derfor blir de datastrukture ie i objektet beskyttet, og riktig oppdatert (hvis metodee er riktig programmert). Ikapslig! class Flysalg { static it atseter = 7; it atsolgt = 0; public static void mai(strig[] args) { System.out.pritl("Skal selge::" + atseter + " flyseter med 2 selgere"); Flysalg fly= ew Flysalg(); Selger s1 = ew Selger ( Stei ", fly); s1.start(); Selger s2 = ew Selger( Michael", fly); s2.start(); it atigje () { retur atseter; (" # 6 56" 789: void selg(it at ) { atseter -= at; atsolgt +=at; System.out.pritl(" Salg: at igje:" + atseter +", at solgt: " + atsolgt); class Selger exteds Thread { Flysalg fly; Strig av; Selger(Strig av,flysalg fly) { this.av = av; this.fly = fly; public void ru() { while (fly.atigje() > 0 ) { it øske = (it) (Math.radom() * fly.atigje() + 1); System.out.pritl( av+ " vil selge:" + øske); // vet litt sleep((log) (1000 * Math.radom())); catch (IterruptedExceptio e) { fly.selg(øske); sleep((log) 2000); // vet 2 sek catch (IterruptedExceptio e) { // Selgere ferdig ferdig ;" :# ; : $78 : ; :<:% : ; :<:% : ; : $78 : ; :<:% : ; :<:=% : "76... class Flysalg2 { static it atseter = 7 ; it atsolgt=0; public static void mai(strig[] args) { System.out.pritl("Skal selge::" + atseter + " flyseter med 2 selgere"); Flysalg2 fly= ew Flysalg2(); Selger s1 = ew Selger ( Stei ", fly); s1.start(); Selger s2 = ew Selger( Michael", fly); s2.start(); it atigje () { retur atseter; sychroized boolea prøvsalg(it at) { if (atseter >= at ) { atseter -= at; atsolgt += at; System.out.pritl(" Salg: at igje:" + atseter + ", at solgt: " + atsolgt); retur true; else { retur false;

9 class Selger exteds Thread { Flysalg fly; Strig av; Selger(Strig av,flysalg fly) { this.av = av; this.fly = fly; public void ru() { while (fly.atigje() > 0 ) { it øske = (it) (Math.radom() * fly.atigje() +1); System.out.pritl( av+ " vil selge:" + øske); // vet litt sleep((log) (1000 * Math.radom())); catch (IterruptedExceptio e) { if ( fly.prøvsalg(øske)) System.out.pritl("Salget OK for:" + av); else System.out.pritl("Allerede solgt for " + av);); sleep((log) 2000); // vet 2 sek catch (IterruptedExceptio e) { // Selgere ferdig ;" :# ; : $78 : ; :%<:% : ; >#:$78? #; $78 : ; : ; :%<:% : ; >#:;? #$78 "76... Mer om hvorfor og hvorda vi bruker tråder F.eks.: Vi har et program som skal betjee flere brukere (som flybestillig). Hver bruker får da si ege tråd, som betjeer é bruker. Web-tjeester: Hver bruker si web-side. Tråder og prosesser: Hver tig du skal kue gjøre, skrives som et ekelt program som gjør é oppgave for é bruker Skal så e bruker gjøre flere tig samtidig eller flere brukere gjøre e tig hver, ytter vi flere tråder og/eller prosesser (e til hver) Tråder er lettere e prosesser. I Java: Setter vi sychroized fora metodee, vil vi sikre at: Høyst e tråd er ie i oe av de sykroiserte metodee i dette objektet samtidig. E tråd får slippe til, de adre trådee må vete Når de ee er ferdig, slipper de som veter til (e etter e) Trådegeskaper som arves fra Object Et større litt større eksempel kokk og servitør Husk: alle klasser er subklasse av class Object Ethvert objekt ieholder e styrigsmekaisme for å starte og stoppe tråder ( se i Java-doc ): E alle objekter ka legge seg til å vete på å bli vekket opp igje med wait(); Et aet objekt ka vekke opp e eller alle tråder som veter i et objekt med hhv.: otify(); otyfyall(); Godt råd: Ikke gjør dette på aet e subklasser av Thread (eller i det miste implemeter gresesittet Ruable). Kokke lager mat og setter fram tallerker Servitøre tar e tallerke og serverer Kokke må ikke sette mer e to tallerker fora servitøre (mate blir kald) Servitøre ka selvsagt ikke servere mat som ikke er laget Her: e kokk og e servitør seere flere av hver. >java Restaurat0 10 Kokke laget r 1 Servit r serverer r:1 Kokke laget r 2 Servit r serverer r:2 Kokke laget r 3 Servit r serverer r:3 Kokke laget r 4 Kokke laget r 5 Servit r serverer r:4 Kokke laget r 6 Servit r serverer r:5 Kokke laget r 7 Servit r serverer r:6 Servit r serverer r:7 Kokke laget r 8 Servit r serverer r:8 Kokke laget r 9 Servit r serverer r:9 Kokke laget r 10 Servit r serverer r:10

10 wait(); otify(); Kokke må vete år det er to tallerker i kø Servitøre må vete år det ikke er laget oe mat Kokke må starte opp kelere igje år ha har laget tallerke r. 1 (eller alltid år ha har laget e tallerke?) Servitøre må starte opp kokke igje år ha tar tallerke r. 2 (eller alltid år ha tar e tallerke?) -& #& -& #& public class Restaurat0 { it atbestilt ; it atlaget= 0, atservert = 0; // tallerkeretter Restaurat0(it at) { atbestilt = at; public static void mai(strig[] args) { Restaurat0 rest; rest = ew Restaurat0(Iteger.parseIt(args[0])); Kokk kokk = ew Kokk(rest); kokk.start(); Servitor servitor = ew Servitor(rest); servitor.start(); boolea kokkferdig () { retur atlaget == atbestilt; boolea servitørferdig () { retur atservert == atbestilt; sychroized void puttallerke() { // Kokketråde blir eier av låse. while (atlaget - atservert > 2) { /* så lege det er mist 2 tallerker * som ikke er servert, skal kokke vete. */ wait(); /* Kokketråde gir fra seg * låse og sover til de catch (IterruptedExceptio e) { // Kokketråde blir igje eier av låse. atlaget++; System.out.pritl("Kokke laget r " + atlaget); otify(); /* Si ifra til servit{øre. */ sychroized void gettallerke() { // Servitørtråde blir eier av låse. while (atlaget == atservert ) { /* så lege kokke ikke har plassert * e y tallerke. Dermed skal * servitøre vete. */ wait(); /* Servitørtråde gir fra seg * låse og sover til de catch (IterruptedExceptio e) { // Servitørtråde blir igje eier av låse. atservert++; System.out.pritl("Servitør serverer r:" + atservert); otify(); /* si ifra til kokke. */ // ed class Restaurat0 class Kokk exteds Thread { Restaurat0 rest; Kokk(Restaurat0 rest) { public void ru() { while(!rest.kokkferdig()) { rest.puttallerke(); // lever tallerke sleep((log) (1000 * Math.radom())); catch (IterruptedExceptio e) { // Kokke er ferdig class Servitor exteds Thread { Restaurat0 rest; Servitor(Restaurat0 rest) { public void ru() { while (! rest.servitørferdig()) { rest.gettallerke(); /* het tallerke og * server */ sleep((log) (1000 * Math.radom())); catch (IterruptedExceptio e) { // Servitøre er ferdig!6 A<:"<+ #6<

Om Grafiske Bruker-Grensesnitt (GUI) Hvordan gjør vi det, to typer av vinduer? GUI (Graphical User Interface)-programmering

Om Grafiske Bruker-Grensesnitt (GUI) Hvordan gjør vi det, to typer av vinduer? GUI (Graphical User Interface)-programmering Uke9. mars 2005 rafisk brukergresesitt med Swig og awt Litt Modell Utsy - Kotroll Del I Stei jessig Ist for Iformatikk Uiv. i Oslo UI (raphical User Iterface)-programmerig I dag Hvorda få laget et vidu

Detaljer

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf 1010-2007 GUI - del 2

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf 1010-2007 GUI - del 2 GUI (Graphical User Iterface)-programmerig If 1010-2007 GUI - del 2 Stei Gjessig Ist for Iformatikk Uiv. i Oslo Tidligere Hvorda få laget et vidu på skjerme Grafikk (tegig i viduet) Hvorda legge ulike

Detaljer

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo INF1010 - Våren 2012 Tråder del 1 Parallelle programmer og felles data Stein Gjessing,, Universitetet i Oslo 1 2 Oversikt Hva er parallelle programmer? Hvorfor parallelle programmer? Hvordan kan de'e skje

Detaljer

Hvordan gjør vi det, to typer av vinduer? Om Grafiske Bruker-Grensesnitt (GUI) GUI (Graphical User Interface)-programmering

Hvordan gjør vi det, to typer av vinduer? Om Grafiske Bruker-Grensesnitt (GUI) GUI (Graphical User Interface)-programmering GUI (Graphical User Iterface)-programmerig Uke 11 13. mars 2007 Grafisk brukergresesitt med Swig og awt Litt Modell Utsy - Kotroll Del I Stei Gjessig Ist for Iformatikk Uiv. i Oslo I dag (så lagt vi kommer)

Detaljer

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk INF1010 - Våren 2015 Li' repe$sjon om Tråder og GUI Stein Gjessing,, Universitetet i Oslo 1 GUI, tråder og hendelser Op-sys (Win, Linux,..) Ditt Program sin Event Dispatch Thread Hver ting brukeren gjør

Detaljer

n / ($$ n 0$$/ $ " 1! <! ')! $ : ; $.+ $.5.+ .!)/!/ ) $.) 6$ 7$, $.5.,.9+- 5.+ 8$ 7$, + - 5.

n / ($$ n 0$$/ $  1! <! ')! $ : ; $.+ $.5.+ .!)/!/ ) $.) 6$ 7$, $.5.,.9+- 5.+ 8$ 7$, + - 5. "# %% & ' ()*,"""). / " %% &%% / ( 0/ " 1 /(232.,..5. 6 7,.5.,. / : ; 5.. )// ).) 8 < ') < 6 6 8 < 8 8 7,.5.,.9 5. 5. 5. 5. 5.. 5..9 /.> DB(?/ ( / (.?/. /?(5@"""6(?( 5@""6 &. A8 6 (."B 3 8 6 ) ("?/& =

Detaljer

INF3030 Uke 6, våren Eric Jul PSE Inst. for informatikk

INF3030 Uke 6, våren Eric Jul PSE Inst. for informatikk INF3030 Uke 6, våre 2019 Eric Jul PSE Ist. for iformatikk 1 Å dele opp algoritme Kode består e eller flere steg; som oftest i form av e eller flere samliger av løkker (som er ekle, doble, triple..) Vi

Detaljer

INF3030 Uke 7, våren Eric Jul PSE Inst. for informatikk

INF3030 Uke 7, våren Eric Jul PSE Inst. for informatikk INF3030 Uke 7, våre 2019 Eric Jul PSE Ist. for iformatikk 1 Hva så vi på i uke 6 1. Eratosthees sil 2. Kokker og Kelere 3. Cocurrecy: De første to av tre måter å programmere moitorer i Java eksemplifisert

Detaljer

Inf Våren 2008 Tråder del 1 Parallelle programmer og felles data. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Inf Våren 2008 Tråder del 1 Parallelle programmer og felles data. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Inf 1010 - Våren 2008 Tråder del 1 Parallelle programmer og felles data Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Oversikt Hva er parallelle programmer? Hvorfor parallelle programmer?

Detaljer

Oversikt. Inf Våren Parallelle programmer og felles data. Hva er parallelle programmer I I. Hva er parallelle programmer?

Oversikt. Inf Våren Parallelle programmer og felles data. Hva er parallelle programmer I I. Hva er parallelle programmer? Oversikt Inf 1010 - Våren 2009 Tråder del 1 Parallelle programmer og felles data Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Hva er parallelle programmer? Hvorfor parallelle programmer?

Detaljer

IN1010 våren 2018 Tirsdag 13. februar. Interface - Grensesnitt

IN1010 våren 2018 Tirsdag 13. februar. Interface - Grensesnitt IN1010 våre 2018 Tirsdag 13. februar Iterface - Gresesitt Stei Gjessig Dages hovedtema Egelsk: Iterface (også et Java-ord) Norsk: Gresesitt Les otatet Gresesitt i Java av Stei Gjessig To motivasjoer for

Detaljer

INF Våren Tråder. del 1. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

INF Våren Tråder. del 1. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk INF1010 - Våren 2014 Tråder del 1 Stein Gjessing,, Universitetet i Oslo 1 Maskin med 8 kjerner 2 Oversikt Hva er parallelle programmer? Hvorfor parallelle programmer? Hvordan kan de'e skje på en kjerne/cpu/prosessor?

Detaljer

INF1010 våren 2017 Torsdag 9. februar. Interface - Grensesnitt

INF1010 våren 2017 Torsdag 9. februar. Interface - Grensesnitt INF1010 våre 2017 Torsdag 9. februar Iterface - Gresesitt og litt om geeriske klasser og geeriske iterface hvis tid Stei Gjessig Dages hovedtema Egelsk: Iterface (også et Java-ord) Norsk: Gresesitt Les

Detaljer

INF1010 våren 2017 Torsdag 26. januar. Arv og subklasser del 1. Stein Gjessing Institutt for informatikk Universitetet i Oslo

INF1010 våren 2017 Torsdag 26. januar. Arv og subklasser del 1. Stein Gjessing Institutt for informatikk Universitetet i Oslo INF1010 våre 2017 Torsdag 26. jauar Arv og subklasser del 1 Stei Gjessig Istitutt for iformatikk Uiversitetet i Oslo 1 Når du har lært om subklasser ka du programmere med: Første uke: Spesialiserig (og

Detaljer

IN1010 våren 2019 Onsdag 15. mai. Rask repetisjon av subklasser og tråder (pluss µ nytt)

IN1010 våren 2019 Onsdag 15. mai. Rask repetisjon av subklasser og tråder (pluss µ nytt) IN1010 våre 2019 Osdag 15. mai Rask repetisjo av subklasser og tråder (pluss µ ytt) Stei Gjessig Istitutt for iformatikk Uiversitetet i Oslo 1 Iledig Dette er 41 lysark som det ikke er mulig å gå gjeom

Detaljer

INF1010 våren 2005 Uke 3, 25. januar Arv og subklasser del I

INF1010 våren 2005 Uke 3, 25. januar Arv og subklasser del I Emeoversikt subklasser INF1010 våre 2005 Uke 3, 25. jauar Arv og subklasser del I Stei Gjessig Istitutt for iformatikk 1 Geeraliserig - spesialiserig Gjebruk av klasser Ved sammesetig (komposisjo) Ved

Detaljer

INF1010 - våren 2007 16. januar, uke 3 - Oversikt og forutsetninger Java datastruktur-tegninger

INF1010 - våren 2007 16. januar, uke 3 - Oversikt og forutsetninger Java datastruktur-tegninger INF1010 - våre 2007 16. jauar, uke 3 - Oversikt og forutsetiger Java datastruktur-tegiger Stei Gjessig Ist. for iformatikk Nye temaer i INF1010 Fra problem til program Software Egieerig light, fasee i

Detaljer

Mer om utvalgsundersøkelser

Mer om utvalgsundersøkelser Mer om utvalgsudersøkelser I uderkapittel 3.6 i læreboka gir vi e kort iførig i takegage ved utvalgsudersøkelser. Vi gir her e grudigere framstillig av temaet. Populasjo og utvalg Ved e utvalgsudersøkelse

Detaljer

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet K A P I T T E L 18 Tråder N år et program kjøres, utføres programsetningene i en bestemt rekkefølge. En tråd er det samme som denne programflyten, og i dette kapitlet skal vi se på hvordan vi starter og

Detaljer

TOD063 Datastrukturer og algoritmer

TOD063 Datastrukturer og algoritmer TOD063 Datastrukturer og algoritmer Øving : 3 Utlevert : Uke 7 Innleveringsfrist : 26. februar 2010 Klasse : 1 Data og 1 Informasjonsteknologi Gruppearbeid: 2-3 personer pr. gruppe. Oppgave 1 Vi skal lage

Detaljer

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER .9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,

Detaljer

INF2440 Uke 5, våren2018. Eric Jul PSE Inst. for informatikk

INF2440 Uke 5, våren2018. Eric Jul PSE Inst. for informatikk INF2440 Uke 5, våre2018 Eric Jul PSE Ist. for iformatikk 1 Hva så vi på i Uke4 1. Kommetarer om matrise-multiplikasjo 2. Hvorfor vi ikke bruker PRAM modelle for parallelle beregiger som skal gå fort. 3.

Detaljer

INF2440 Uke 6, våren Eric Jul PSE Inst. for informatikk

INF2440 Uke 6, våren Eric Jul PSE Inst. for informatikk INF2440 Uke 6, våre 2018 Eric Jul PSE Ist. for iformatikk 1 Hva så vi på i uke 5 (ku første forelesigstime) 1. Eda bedre Matrise-multipliserig 2. Modell2-kode for sammeligig av kjøretider på (ekle) parallelle

Detaljer

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm Mer om easyio Mer om forgreninger Løkker 7. september 2004 Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 4 1 Tre måter å lese fra terminal Først:

Detaljer

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden Øving 4 Thorstein Brekke Operativsystemer Oppgave 1 Kode for Murer: // Uke4oppgave1murer.cpp : main project file. #include "stdafx.h" using namespace System; using namespace Threading; using namespace

Detaljer

INF2440, Uke 3, våren 2018 Regler for parallelle programmer, mer om cache og Radix-algoritmen. Eric Jul PSE, Inst. for informatikk

INF2440, Uke 3, våren 2018 Regler for parallelle programmer, mer om cache og Radix-algoritmen. Eric Jul PSE, Inst. for informatikk INF2440, Uke 3, våre 2018 Regler for parallelle programmer, mer om cache og Radix-algoritme Eric Jul PSE, Ist. for iformatikk 1 Hva har vi sett på i Uke2 I) Tre måter å avslutte tråder vi har startet.

Detaljer

ARBEIDSHEFTE I MATEMATIKK

ARBEIDSHEFTE I MATEMATIKK ARBEIDSHEFTE I MATEMATIKK Temahefte r Hvorda du reger med poteser Detaljerte forklariger Av Matthias Loretze mattegriseforlag.com Opplsig: E potes er e forkortet skrivemåte for like faktorer. E potes består

Detaljer

INF1010 - Seminaroppgaver til uke 3

INF1010 - Seminaroppgaver til uke 3 INF1010 - Seminaroppgaver til uke 3 Oppgave 1 I denne oppgaven skal vi lage et klassehiearki av drikker. Alle klassene i hiearkiet skal implementere følgende grensesnitt p u b l i c i n t e r f a c e Drikkbar

Detaljer

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd J INF1010 Tråder J Marit Nybakken marnybak@ifi.uio.no Motivasjon Til nå har vi kun skrevet programmer der programmet bare var på ett sted i koden til enhver tid (bortsett fra når vi har drevet med GUI,

Detaljer

Løsning eksamen R1 våren 2010

Løsning eksamen R1 våren 2010 Løsig eksame R våre 00 Oppgave a) ) f ( ) l f ( ) ' l l l l f ( ) (l ) ) g( ) 4e g( ) 4 e ( ) 4 e ( ) g( ) 4( ) e b) ( ) 4 4 6 P ) P() 4 4 6 8 6 8 6 0 Divisjo med ( ) går opp. 4 4 6 : ( ) 8 4 4 8 6 8 6

Detaljer

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket Programmeringsspråk for nybegynnere Krav til språket Hva om vi laget vårt eget språk til INF1000? Programmeringsspråket må være så enkelt som mulig. (Programmering er vanskelig nok som det er.) Hvilke

Detaljer

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være

Detaljer

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2 Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2 11.2 Korteste vei i en graf 11.2.1 Dijkstras metode En graf er et system med noder og kanter mellom noder. Grafen kalles rettet Notasjon Verdien

Detaljer

INF1010. Grafisk brukergrensesni. med Swing og awt del 2. INF1010 - - Grafisk brukergrensesni4 II

INF1010. Grafisk brukergrensesni. med Swing og awt del 2. INF1010 - - Grafisk brukergrensesni4 II INF1010 Grafisk brukergrensesni. med Swing og awt del 2 1 GUI (Graphical User Interface)- programmering n n n Enkel behandling av knappetrykk mm. Layout av vinduer Om å lytte på knappetrykk med musa n

Detaljer

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo Inf 1010 - Våren 2011 Tråder del 1 Parallelle programmer og felles data Stein Gjessing,, Universitetet i Oslo 1 2 Oversikt Hva er parallelle programmer? Hvorfor parallelle programmer? Hvordan kan de'e

Detaljer

CONSTANT FINESS SUNFLEX SMARTBOX

CONSTANT FINESS SUNFLEX SMARTBOX Luex terrassemarkiser. Moterig- og bruksavisig CONSTNT FINESS SUNFLEX SMRTBOX 4 5 6 7 8 Markises hovedkompoeter og mål Kombikosoll og plasserig rmklokker og justerig Parallelljusterig Motordrift og programmerig

Detaljer

Socket og ServerSocket

Socket og ServerSocket Side 1 av 5, socket og klient-tjener, V. Holmstedt, HiO 2006 Dette dokumentet er revidert den 29.8.2006, kl:12:30. Det er foretatt rettelser i begge versjoner av klassen A_Server. Socket og ServerSocket

Detaljer

INF2440 Uke 4, v2018 Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model. Eric Jul PSE, Inst.

INF2440 Uke 4, v2018 Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model. Eric Jul PSE, Inst. INF2440 Uke 4, v2018 Om å samle parallelle svar, matrisemultiplikasjo og The Java Memory Model Eric Jul PSE, Ist. for iformatikk 1 Hva så vi på i uke 3 1. Presiserig av hva som er pesum 2. Samtidig skrivig

Detaljer

TOD063 Datastrukturer og algoritmer

TOD063 Datastrukturer og algoritmer TOD063 Datastrukturer og algoritmer Øving : 4 Utlevert : Veke 9 Innleveringsfrist : 19. mars 2010 Klasse : 1 Data og 1 Informasjonsteknologi Ta gjerne 1 og 2 først! Gruppearbeid: 2 personar pr. gruppe

Detaljer

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo Inf 1010 Våren 2010 Tråder del 1 Parallelle programmer og felles data Stein Gjessing,, Universitetet i Oslo 1 Oversikt Hva er parallelle programmer? Hvorfor parallelle programmer? Hvordan kan de'e skje

Detaljer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2 Delkapittel 9.2 Rød-svarte og 2-3-4 trær Side 1 av 16 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2 9.2 Rød-svarte og 2-3-4 trær 9.2.1 B-tre av orden 4 eller 2-3-4 tre Et rød-svart tre og et

Detaljer

Tråder Repetisjon. 9. og 13. mai Tråder

Tråder Repetisjon. 9. og 13. mai Tråder Tråder Repetisjon 9. og 13. mai Tråder Hva er tråder? 2 Hva er tråder? I utgangspunktet uavhengige aktiviteter som konkurrerer om å få bruke prosessoren. 2 Hvorfor tråder? 3 Hvorfor tråder? Flere oppgaver

Detaljer

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 INF1000 Metoder Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 Motivasjon Når man begynner å skrive store programmer, vil man fort oppleve at programmene blir uoversiktlige. Det blir vanskeligere

Detaljer

Tråder Repetisjon. 9. og 13. mai Tråder

Tråder Repetisjon. 9. og 13. mai Tråder Tråder Repetisjon 9. og 13. mai Tråder Hva er tråder? 2 Hva er tråder? I utgangspunktet uavhengige aktiviteter som konkurrerer om å få bruke prosessoren. 2 Hvorfor tråder? 3 Hvorfor tråder? Flere oppgaver

Detaljer

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo INF, 22. mai 23 Prøveeksamen 23 (Eksamen 2. juni 22) Stein Gjessing Inst. for Informatikk Universitetet i Oslo Oppgave a Tegn klassehierarkiet for de 9 produkttypene som er beskrevet over. Inkluder også

Detaljer

Kommentarer til oppgaver;

Kommentarer til oppgaver; Kapittel - Algebra Versjo: 11.09.1 - Rettet feil i 0, 1 og 70 og lagt i litt om GeoGebra-bruk Kommetarer til oppgaver; 0, 05, 10, 13, 15, 5, 9, 37, 5,, 5, 59, 1, 70, 7, 78, 80,81 0 a) Trykkfeil i D-koloe

Detaljer

Løse reelle problemer

Løse reelle problemer Løse reelle problemer Litt mer om løkker, metoder med returverdier og innlesing fra fil INF1000, uke4 Geir Kjetil Sandve Repetisjon fra forrige uke: while Syntaks: while (condition) do1; do2;... Eksempel:

Detaljer

Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011)

Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011) Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011) HashMap, innstikksortering, javadoc (kap. 9.1-9.11, m.m. i "Rett på Java" 3. utg.) NB! Legg merke til at disse er løsningsforslag. Løsningene

Detaljer

IN3030 Uke 12, v2019. Eric Jul PSE, Inst. for informatikk

IN3030 Uke 12, v2019. Eric Jul PSE, Inst. for informatikk IN3030 Uke 12, v2019 Eric Jul PSE, Ist. for iformatikk 1 Hva skal vi se på i Uke 12 Review Radix sort Oblig 4 Text Program Parallellizig 2 Oblig 4 Radix sort Parallelliser Radix-sorterig med fra 1 5 sifre

Detaljer

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo INF1010 - Våren 2013 Tråder del 1 Parallelle programmer og felles data Stein Gjessing,, Universitetet i Oslo 1 2 Oversikt Hva er parallelle programmer? Hvorfor parallelle programmer? Hvordan kan de'e skje

Detaljer

INF1010 Arv. Marit Nybakken marnybak@ifi.uio.no 2. februar 2004

INF1010 Arv. Marit Nybakken marnybak@ifi.uio.no 2. februar 2004 INF1010 Arv Marit Nybakken marnybak@ifi.uio.no 2. februar 2004 Motivasjon Arv bruker vi så vi skal slippe å skrive oss i hjel. Når vi programmerer, prøver vi gjerne å modellere en del av verden ved hjelp

Detaljer

INF2440 Effektiv parallellprogrammering Uke 1, våren Eric Jul Professor PSE Institutt for Informatikk

INF2440 Effektiv parallellprogrammering Uke 1, våren Eric Jul Professor PSE Institutt for Informatikk INF2440 Effektiv parallellprogrammerig Uke 1, våre 2018 Eric Jul Professor PSE Istitutt for Iformatikk 1 Litt om Eric Ph.D. Uiversity of Washigto, 1989 Dask-amerikaer Bor i Damark pedler til Oslo ca 3-4

Detaljer

INF våren 2005 Uke 1, 11 jan - Praktisk, oversikt og forutsetninger

INF våren 2005 Uke 1, 11 jan - Praktisk, oversikt og forutsetninger INF1010 - våre 2005 Uke 1, 11 ja - Praktisk, oversikt og forutsetiger Stei Gjessig og Stei Michael Storleer Ist. for iformatikk Om INF1010 Forutsetter INF1000 (eller tilsvarede som Humit1700?) Lærebok

Detaljer

23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert. Grunnkurs i objektorientert programmering Introduksjon til objektorientert programmering INF1000 Høst 2015 Siri Moe Jensen INF1000 - Høst 2015 uke 5 1 Siri Moe Jensen INF1000 - Høst 2015 uke 5 2 Kristen

Detaljer

Kapittel 7: Mer om arv

Kapittel 7: Mer om arv Kapittel 7: Mer om arv Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag,

Detaljer

INF Notater. Veronika Heimsbakk 10. juni 2012

INF Notater. Veronika Heimsbakk 10. juni 2012 INF1010 - Notater Veronika Heimsbakk veronahe@student.matnat.uio.no 10. juni 2012 1 Tilgangsnivåer 2 CompareTo Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y N N

Detaljer

Uke 12 IN3030 v2019. Eric Jul PSE-gruppa Ifi, UiO

Uke 12 IN3030 v2019. Eric Jul PSE-gruppa Ifi, UiO Uke 12 IN3030 v2019 Eric Jul PSE-gruppa Ifi, UiO Oblig 5 Kovekse Ihylliga Itroduksjo De kovekse ihylliga til pukter Oblig 5 Hva er det, defiisjo Hvorda ser de ut Hva brukes de til? Hvorda fier vi de? 24

Detaljer

INF2440 Effektiv Parallellprogrammering Uke 2 våren tidtaking. Eric Jul PSE Inst. for informatikk

INF2440 Effektiv Parallellprogrammering Uke 2 våren tidtaking. Eric Jul PSE Inst. for informatikk INF2440 Effektiv Parallellprogrammerig Uke 2 våre 2018 - tidtakig Eric Jul PSE Ist. for iformatikk 1 Oppsummerig Uke1 Vi har gjeomgått hvorfor vi får flere-kjere CPUer Tråder er måte som et Javaprogram

Detaljer

"Nelsons kaffebutikk"

Nelsons kaffebutikk "Nelsons kaffebutikk" et eksempel på systemutvikling med objekter Originale lysark av Jens Kaasbøll - mindre endringer av G. Skagestein og Knut Hegna IN105-javaNelson-1 Nelsons kaffebutikk Området som

Detaljer

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk INF1010 11. mai 2017 Monitorer med kritiske regioner og passive venting innbygget i Java - Kommunikasjon mellom prosesser i Java (Ikke pensum i INF1010) Stein Gjessing Universitetet i Oslo 1 Repetisjon:

Detaljer

INF Våren 2017 Tråder del 1

INF Våren 2017 Tråder del 1 INF1010 - Våren 2017 Tråder del 1 23. mars 2017 Stein Gjessing,, Universitetet i Oslo Horstmann kap 20.1 20.3 1 Maskin med 8 kjerner 2 Oversikt Hva er parallelle programmer? Hvorfor parallelle programmer?

Detaljer

Fagdag 2-3mx 24.09.07

Fagdag 2-3mx 24.09.07 Fagdag 2-3mx 24.09.07 Jeg beklager at jeg ikke har fuet oe ye morsomme spill vi ka studere, til gjegjeld skal dere slippe prøve/test dee gage. Istruks: Vi arbeider som valig med 3 persoer på hver gruppe.

Detaljer

Utførelse av programmer, metoder og synlighet av variabler i JSP

Utførelse av programmer, metoder og synlighet av variabler i JSP Utførelse av programmer, metoder og synlighet av variabler i JSP Av Alf Inge Wang 1. Utførelse av programmer Et dataprogram består oftest av en rekke programlinjer som gir instruksjoner til datamaskinen

Detaljer

29.02.2012. GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser. En oversikt over kapittel 19 i boka

29.02.2012. GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser. En oversikt over kapittel 19 i boka GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser LC191D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_lc191d.php Høgskolen

Detaljer

Konfidensintervall. Notat til STK1110. Ørnulf Borgan, Ingrid K. Glad og Anders Rygh Swensen Matematisk institutt, Universitetet i Oslo.

Konfidensintervall. Notat til STK1110. Ørnulf Borgan, Ingrid K. Glad og Anders Rygh Swensen Matematisk institutt, Universitetet i Oslo. Kofidesitervall Notat til STK1110 Ørulf Borga, Igrid K. Glad og Aders Rygh Swese Matematisk istitutt, Uiversitetet i Oslo August 2007 Formål E valig metode for å agi usikkerhete til et estimat er å berege

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL Delprøve Kandidatnr: Prøvedato: 2. mars 2005 Varighet: 3 timer (9:00 12:00) Fagnummer: LO196D Fagnavn: Videregående programmering med

Detaljer

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler

Detaljer

OPPGAVE 5b og 8b Java Kode

OPPGAVE 5b og 8b Java Kode OPPGAVE 5b og 8b Java Kode public class Kant boolean behandlereturavbil() BehandleReturAvBil behandler = new BehandleReturAvBil(this); String regnr; int kmstand, tanknivaa; boolean erskadet; // 1: Få verdiene

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Eksamensdag: 17. august 2012 Tid for eksamen: 09.00 15.00 Oppgavesettet er på 5 sider. Vedlegg:

Detaljer

Avsnitt 8.1 i læreboka Differensligninger

Avsnitt 8.1 i læreboka Differensligninger Diskret Matematikk Fredag 6. ovember 015 Avsitt 8.1 i læreboka Differesligiger I kapittel lærte vi om følger og rekker. Vi studerte både aritmetiske og geometriske følger og rekker. Noe følger og rekker

Detaljer

Repetisjon. INF1000 - gruppe 13

Repetisjon. INF1000 - gruppe 13 Repetisjon INF1000 - gruppe 13 Lese fra fil Scanner import java.util.*; void lesfrafil() { try { Scanner innfil = new Scanner(new File( fugleobservasjoner.txt )); while (innfil.hasnext()) { String linje

Detaljer

Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor.

Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor. Kapittel 7 Synkronisering II etingelse oppfylt (0) liste venteliste tråd-deskriptor tråd-deskriptor tråd-deskriptor tråd-deskriptor Figur 7-1: Datastrukturen for en etingelse. are når oppfylt er 0 kan

Detaljer

Kontinuasjonseksamen

Kontinuasjonseksamen Høgskolen i Gjøvik Kontinuasjonseksamen FAGNAVN: FAGNUMMER: Grunnleggende datakunnskap, programmering og datastrukturer L 176 A EKSAMENSDATO: 5. januar 1999 KLASSE: 97HINDA / 97HINDB / 97HDMUA TID: 09.00-14.00

Detaljer

Gjennomgang av eksamen H99

Gjennomgang av eksamen H99 Gjennomgang av eksamen H99 Administrasjon av kurser, studenter og påmeldinger Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for Informatikk Universitetet i Oslo Oppgave 1 (15 %) (Besvares

Detaljer

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster 3 emner i dag! INF1000 Uke 5 Litt om objekter, pekere og null Filer og easyio Litt mer om tekster Litt om objekter, filer med easyio, tekst 1 2 Objekter og pekere Vi lager pekere og objekter når vi bruker

Detaljer

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering Kapittel 1 Datamaskiner og programmeringsspråk Dette kapitlet er en kort introduksjon til programmering. Vi vil se på hvordan man skriver, bygger og kjører programmer, samt illustrere noen sentrale programmeringsbegrep

Detaljer

INF våren 2004 Uke2, 18 jan - Fra problem til program. Utvikling av store datasystemer. 13 UML-diagrammer. Oversikt:

INF våren 2004 Uke2, 18 jan - Fra problem til program. Utvikling av store datasystemer. 13 UML-diagrammer. Oversikt: 13 UML-diagrammer INF1010 - våre 2004 Uke2, 18 ja - Fra problem til program Objektdiagram: Vi kommer til å tege Java datastrukturer istede. Stei Gjessig Ist. for iformatikk Klassediagram: Oversikt: Utviklig

Detaljer

Oppgave 1 (Programtolkning) INF1000 Eksamen V06. Oppgave 1 (Programtolkning) Oppgave 1 (Programtolkning)

Oppgave 1 (Programtolkning) INF1000 Eksamen V06. Oppgave 1 (Programtolkning) Oppgave 1 (Programtolkning) INF1000 Eksamen V06 1a: Hva blir skrevet ut når programmet nedenfor kjøres? class stringhåndtering{ public static void main (String[] args){ String s = "Lykke til på eksamen"; String t = "Eksamen"; System.out.println(s.indexOf(t));

Detaljer

GUI («Graphical User Interface») del 2

GUI («Graphical User Interface») del 2 GUI («Graphical User Interface») del 2 Interaksjon med brukeren Hendelsesdrevet programmering Tråder i GUI Et spill basert på klikkbare ruter Se også på Infoskrivet https://www.uio.no/studier/emner/matnat/

Detaljer

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder: Lese fra fil Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo INF1000 : Forelesning 5 Vi må først importere pakken easyio Vi åpner

Detaljer

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 % Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 % Stein Gjessing Institutt for Informatikk Universitetet i Oslo 1 Oppgave 10 Tegning av datastrukturen (vekt 5% av del B) Tegn datastrukturen til

Detaljer

Stabler, Køer og Lister. ADT er

Stabler, Køer og Lister. ADT er Stabler, er og Lister I. STEL OG QUEUE DT I.1 DT I.2 rray implemetasjo I.3 Liket-Liste implemetasjo II. DQUEUE DT III.IMPLEMENTSJON V EN DT MED EN NNEN DT Kap. 3 (kursorisk: 3.1.3, 3.2.3, 3.4; utatt: 3.2.4,

Detaljer

(MVC - Model, View, Control)

(MVC - Model, View, Control) INF1010 - våren 2008 Modell - Utsyn - Kontroll (MVC - Model, View, Control) Stein Gjessing Inst. for informatikk Et bankprogram Vi skal lage et program som håndterer kontoene i en bank. En konto eies av

Detaljer

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf 1010-2008 GUI - del 2

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf 1010-2008 GUI - del 2 GUI (Graphical User Interface)-programmering Inf 1010-2008 GUI - del 2 Stein Gjessing Inst for Informatikk Univ. i Oslo Tidligere Hvordan få laget et vindu på skjermen Grafikk (tegning i vinduet) Hvordan

Detaljer

Brukermanual for statistikk på Asset on web: Statistikk salg pr dag, uke eller måned fordelt på alle avdelinger:

Brukermanual for statistikk på Asset on web: Statistikk salg pr dag, uke eller måned fordelt på alle avdelinger: Brukermanual for statistikk på Asset on web: Statistikk salg pr dag, uke eller måned fordelt på alle avdelinger: 1. Velg først "Vis avanserte funksjoner" Evt. hvis du ønsker å se på salget i går eller

Detaljer

Eksamen REA3028 S2, Våren 2010

Eksamen REA3028 S2, Våren 2010 Eksame REA308 S, Våre 010 Del 1 Tid: timer Hjelpemidler: Valige skrivesaker, passer, lijal med cetimetermål og vikelmåler er tillatt. Oppgave 1 (6 poeg) a) Deriver fuksjoee: 1) f xx lx ) gx 3 e x b) Gitt

Detaljer

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 GUI (Graphical User Interface)- programmering Hvordan lage et vindu på skjermen Hvordan legge ulike komponenter i vinduet (trykknapper, tekseelter, tekst,

Detaljer

IN1010 våren 2019 Onsdag 6. februar. Arv og subklasser - del 2

IN1010 våren 2019 Onsdag 6. februar. Arv og subklasser - del 2 IN1010 våre 2019 Osdag 6. februar Arv og subklasser - del 2 Stei Gjessig Dages tema Virtuelle metoder som er det samme som Polymorfi Når bruker vi arv / år bruker vi komposisjo Kostruktører i subklasser

Detaljer

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger I dag INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Litt repetisjon Mer om uttrykk Lesing og skriving til terminal Forgreninger

Detaljer

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Konstruktører. Bruk av konstruktører når vi opererer med enkle klasser er ganske ukomplisert. Når vi skriver. skjer følgende: Konstruktører Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver Punkt p = new Punkt(3,4); class Punkt { skjer følgende: int x, y; 1. Det settes av plass i

Detaljer

Klasser, objekter, pekere og UML. INF1000 - gruppe 13

Klasser, objekter, pekere og UML. INF1000 - gruppe 13 Klasser, objekter, pekere og UML INF1000 - gruppe 13 Klasse Beskriver ofte ting fra den virkelige verden Veldig ofte et substantiv (Person, Bok, Bil osv.) class Person { String navn; int alder; } class

Detaljer

INF1010 Tråder II 6. april 2016

INF1010 Tråder II 6. april 2016 INF1010 Tråder II 6. april 2016 Stein Gjessing Universitetet i Oslo 1 Tråder i Java tråden minrunp class MinRun implements Runable { MinRun(... ) {... } public void run( ) {...... } } //end

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Eksamen i : Eksamensdag : Torsdag 2. desember 2004 Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler

Detaljer

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; } Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =

Detaljer

Innlesning fra tastatur med easyio. INF1000 høst 2010. Vi må først skrive i toppen av programmet: import easyio.*;

Innlesning fra tastatur med easyio. INF1000 høst 2010. Vi må først skrive i toppen av programmet: import easyio.*; Innlesning fra tastatur med easyio INF1000 høst 2010 Forelesning 2: Innlesning fra terminal Boolean-variable if-setninger Løkker Litt mer om heltall: divisjon og modulo Vi må først skrive i toppen av programmet:

Detaljer

22.02.2009. Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

22.02.2009. Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java Spørsmål fra forrige forelesning INF1000 Forelesning 7 Operator-presedens i Java? Hvordan virker metodene inword()/inint()/etc. i In-klassen i easyio når vi skriver inn flere verdier på tastaturet? Litt

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Prøveeksamen tirsdag 23. november 2010 Tid for eksamen:

Detaljer

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt. Side 1 av 8 Norges teknisk-naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap Løsningsforslag til EKSAMENSOPPGAVE I FAG TDT4186 OPERATIVSYSTEMER Versjon: 13.des 2011 Faglig

Detaljer