Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Samarbeid mellom objekter
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
C# for javaprogrammerere
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 11 Applet’s Hva karakteriserer applet’sside.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Programmering i Java tilpasset undervisning våren 2009 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 23 (Big Java 2.utg) Tråder. Kjøring av tråder Ein tråd er ein del av eit program som blir eksekvert uavhengig av andre deler av programmet Vi.
Variabler, datatyper og uttrykk
Eric Jul PSE Inst. for informatikk
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16 Tråder Hva er en tråd?side 2-4 Deling av tid mellom tråderside 5-6 Tråder med Runnableside 7 Trådenes tilstanderside 8 Kommunikasjon mellom tråderside 9-10 Låser og synkroniseringside wait(), notify() og notifyAll()side 13 Avbruddside 14-17

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 2 Hva er en tråd? Når vi starter et program, kan vi også si at vi starter en prosess. Flere prosesser (program) kan kjøre tilsynelatende samtidig (multitasking), eksempler: tekstbehandler og regneark og vårt eget Java-program. Også innenfor et og samme program kan flere operasjoner kjøre tilsynelatende samtidig, for eksempel skriving til disk og kompliserte beregninger. Slike (små) prosesser inne i prosesser kalles tråder. På datamaskiner med én prosessor fordeler operativsystemet prosessortiden mellom prosessene/trådene som tilsynelatende kjører samtidig. Bytte av prosess/tråd kalles kontekstbytte. Dataene som tilhører en prosess lagres unna ved kontekstbytte, og de hentes fram igjen neste gang det er denne prosessen sin tur til å kjøre. Tråder kjører inne i andre prosesser, og tråder i en og samme prosess har ofte felles data som det ikke er nødvendig å lagre unna. Tråder kalles derfor også lettvektsprosesser.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 3 Prosesser og tråder prosess 1prosess 3 prosess 2 tråd 1 tråd 2 tråd 3 tråd 1 tråd 2 tråd 1 Hver prosess får sin egen Process ID (PID)

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 4 initiering en operasjon gjør parallell operasjon avventer resultat fra tråd 2 tråd 1 nye operasjoner tråd 2 fork-linje join-linje Kjøring av to tråder

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 5 Deling av tid mellom tråder To ulike måter å dele tiden mellom tråder på: 1.Tråden sier selv fra at den kan ta en pause. 2.En mekanisme utenfor tråden legger tråden i dvale med makt. (”preemptive multitasking”) Mekanismen ligger i Java-tolkeren, eller i operativsystemet. Mekanismen for å dele tiden er plattformavhengig. Nyere Java-tolkere benytter som oftest metode 2.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 6 Eksempel class Tallskriver extends Thread { private int tallSomSkrives; public Tallskriver(int tall) { tallSomSkrives = tall; } public void run() { while (true) { System.out.print(tallSomSkrives); System.out.print(" "); } class Tallskur { public static void main(String[] args) { Tallskriver skriver1 = new Tallskriver(1); Tallskriver skriver2 = new Tallskriver(2); Tallskriver skriver3 = new Tallskriver(3); Tallskriver skriver4 = new Tallskriver(4); Tallskriver skriver5 = new Tallskriver(5); skriver1.start(); skriver2.start(); skriver3.start(); skriver4.start(); skriver5.start(); } Utskrift:

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 7 Tråder med Runnable Konstruktøren til Thread kan ta et objekt som argument. Da benyttes dette objektets run()-metode. Objektet må tilhøre en klasse som implementerer Runnable. Hensiktsmessig dersom vår trådklasse skal være subklasse til en annen klasse enn Thread class Superklasse { } class Traaden extends Superklasse implements Runnable { private Thread traad; public Traaden() { traad = new Thread(this); traad.start(); } public void run() { while (true) { System.out.println("Lever..."); } class VaarTraad { public static void main(String[] args) { Traaden tr = new Traaden(); }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 8 Trådenes tilstander New –Før og mens start() starter. Runnable –Når run() kjører. Også når tråden midlertidig er stoppet på grunn av at en annen tråd er tildelt kjøretid. Blocked –Når tråden gir seg selv en pause med sleep() eller wait(). –Når den venter på IO. Dead –Når run() har avsluttet av seg selv.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 9 Kommunikasjon mellom tråder En tråd bør generelt tenke på at andre bør få slippe til av og til. Samtidig bør antall kontekstbytter ikke være flere enn nødvendig. static void sleep(long millisekunder) –Klassemetode som sender aktuell tråd inn i hviletilstand den oppgitte tiden, kan for eksempel brukes til å justere farten på en animasjon. static void yeld() –Klassemetode som sier at aktuell tråd kan ta en pause dersom andre venter på å slippe til. –Spesielt aktuelt å bruke denne metoden dersom vi ikke kan være sikre på at plattformen vi kjører på har preemptive multitasking. void join() –Tråd A sender meldingen join() til tråd B. Da vil A stoppe opp inntil tråd B dør. void join(long millisekunder) –Nå vil tråden som sender meldingen (tråd A) vente maksimalt den oppgitte tiden.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 10 Join mellom tråder tråden gjør seg ferdig tråden vil “joine” med tråd 2, og sender meldingen join() tråd 1tråd 2 tråd 1 fortsetter, join() returnerte i det tråd 2 avsluttet

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 11 Låser og synkronisering Alle trådene i et program har tilgang til programmets objekter og klasser tilnærmet samtidig. Hva hvis flere tråder jobber med oppdatering av det samme objektet tilnærmet samtidig? En tråd kan gjerne bli stoppet midt i en metode. tråd 1 tråd 2 tråd 3 objekt som trådene benytter metodekall skrivSekvens(); Vis programliste 16.3 side med resultatutskrift

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 12 Løsningen: synchronized public synchronized void skrivSekvens() { System.out.print("1 "); System.out.print("2 "); System.out.print("3 "); System.out.print("4 "); System.out.print("5 "); } synchronized sikrer oss ikke mot at metoden avbrytes ved kontekstbytte, men at en annen tråd starter den på ny, eller starter en annen av objektets synkroniserte metoder. En tråd son kjører en synkronisert metode, tar objektets lås, den låser alt som er synkronisert i objektet for andre tråder. synchronized sinker programutførelsen noe.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 13 wait(), notify() og notifyAll() Anta at en tråd er inne i en synkronisert del av et objekt. Dersom andre trenger å slippe til, må tråden gi fra seg låsen: –void wait() –void wait(long millisekunder) Tråden som venter, er nå i tilstanden Blocked Tråden må vekkes opp ved at en annen tråd sender melding til objektet: –void notify() vekker en enkelt tråd som venter –void notifyAll() vekker alle trådene som venter Vis programliste 16.4 side

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 14 Avbrudd En tråd kan bli hengende lenge på grunn av metodekallene wait(), sleep() og join() Kan avbryte dette ved å sende meldingen interrupt() til tråden. Et flagg heises (jmf. logisk variabel settes true) som forteller at tråden er havnet i en undertilstand, den er ”avbrutt” (interrupted). Dersom tråden venter –unntaket InterruptedException kastes –avbruddsflagget fires –håndteringen av dette unntaket forteller hva som deretter skal skje Dersom tråden ikke venter –unntak kastes ikke –må sjekke om den er blitt avbrutt if (isInterrupted())…..kanskje avslutte?… –eventuelt også fire avbruddsflagget static boolean interrupted() // obs! klassemetode

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 15 Eksempel, isInterrupted() og interrupted() Eksemplet er hentet fra Chan, Lee & Douglas: The Java Class Libraries, sec.ed. Vol. I,, Addison- Wesley 1998, ISBN , pp import java.util.Random; class MainSleeper { public static void main(String[] args) { Thread t = new Sleeper(); // bytt ut denne med Counter i eksempel 2 t.start(); Random rand = new Random(); while (true) { int p = Math.abs(rand.nextInt()%5000); System.out.println("wake up worker in " + p + "ms"); try { Thread.sleep(p); // hovedtråden sover,… } catch (InterruptedException e) { System.out.println("main interrupted"); } t.interrupt(); // … og vekker deretter opp den andre tråden } Klassene Sleeper og Counter er vist på de neste sidene. Hovedprogrammet er det samme:

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 16 Eksempel Sleeper class Sleeper extends Thread { public void run() { while (true) { try { Thread.sleep(2000); System.out.println("sleeper woke up"); } catch (InterruptedException e) { System.out.println("sleeper interrupted (1): " + isInterrupted()); System.out.println("sleeper interrupted"); } System.out.println("sleeper interrupted (2): " + isInterrupted()); } } alltid false på grunn av at InterruptedException er kastet alltid false på grunn av at programkontrollen kommer hit uten å bli avbrutt, enten via unntakshåndteringen eller utenom denne fordi 2000 ms har gått

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 16, side 17 class Counter extends Thread { public void run() { while (true) { long sum = 0; // antall løkkegjennomløp justeres etter hastigheten på maskinen, // kjøring skal gi en og annen true verdi i utskriften for (int i = 0; i< && !isInterrupted(); i++) { sum += i; } System.out.println("Sum: " + sum); System.out.println("isInterrupted (0): " + isInterrupted()); System.out.println("isInterrupted (1): " + isInterrupted()); System.out.println("interrupted(0): " + Thread.interrupted()); // First call should have cleared it. System.out.println("interrupted (1): " + Thread.interrupted()); } } } true dersom avbrudd før summeringen er ferdig alltid false på grunn av at interrupted() firer avbruddsflagget Les kapittel 16.8 og gjør oppgaven side 548 Eksempel Counter