Dag 10 Flertrådet programmering
|
|
|
- Arne Larsen
- 10 år siden
- Visninger:
Transkript
1 Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument, Trådpulje Evt.: Kommunikation mellem processer og tråde i et GUIprogram Evt.: Synkronisering af processer og tråde, semaforer [TJT] om tråde Evt.: Monitorer, Java synkronisering, Deadlocks Dette materiale er under Åben Dokumentlicens, se
2 Sidste gang - spørgsmål? Dag 9 Andre designmønstre Andre designmønstre: Uforanderlig, Fluevægt, Lagdelt Initialisering, Komposit/Rekursiv Komposition, Kommando/Ændring Fremlæggelse af programmering/status for projekter Evt.: Brug af Properties filer (og præferencer i JDK 1.4) Evt: Kommunikation med udklipsholder og Drag'n'drop Læsning: VP 18, How to Use Drag and Drop and Data Transfer.
3 Krav til projektet
4 Hvordan går det med projektet?
5 Javadoc /** * Eksempel på en kommenteret klasse. */ public class EnKommenteretKlasse /** * Et eksempel på en metode. Metoden tjener * til at vise hvordan javadoc virker. * enstreng strengen ettal tallet * strengen og tallet sat sammen */ public String enmetode(string enstreng, int ettal) return enstreng+ettal; javadoc EnKommenteretKlasse.java De vigtigste klasser i jeres projekt skal være dokumenteret med Javadoc!
6 public class BenytSnakkesagligePersoner public static void main(string[] arg) SnakkesagligPerson p = new SnakkesagligPerson(); Samtidighedsproblemet // Opret ny tråd, klar til at udføre p.run() Thread t = new Thread(p); Hvis 2 tråde kommunikerer Fejl, der er svære at finde Løsninger t.start(); // Nu starter personen med at snakke // Det kan også skrives meget kompakt new Thread(new SnakkesagligPerson()).start(); Semaforer Flertrådet programmering - Synchronized (obj) Dyr i CPU tid!! obj.wait() og obj.notify() Flertrådede designmønstre Med JDK1.5: java.util.concurrent resumé tråd = new Thread(obj); tråd.start(); obj implementerer Runnable obj.run() tråd public class SnakkesagligPerson implements Runnable public void run() for (int i=0; i<5; i++) System.out.println("Bla bla bla "+i); try Thread.sleep(ventetid); catch (InterruptedException e)
7 Designmønstret Producent-Konsument Problem: En separat tråd skal udføre noget (f.eks. nogle opgaver). Opgaverne kommer løbende (fra andre tråde) og skal udføres i rækkefølge. Løsning: Lad de andre tråde producere opgaver, som lægges i en liste. Den separate tråd konsumerer disse opgaver (fjerner dem fra listen og udfører dem) Trådene kommunikerer gennem listen her skal bruges en semafor for at løse samtidighedsproblemet Konsument tråden skal vente på opgaver obj.wait() og obj.notify()
8 Eksempel på Producent-Konsument public class ProducentKonsument extends Thread private List kø = new ArrayList(); /** Læg en opgave i kø til en arbejdstråd */ public static void main(string[] args) throws E public void lægikø(string tekst) ProducentKonsument producentkonsument; synchronized (kø) producentkonsument = new ProducentKonsument() kø.add(tekst); producentkonsument.start(); System.out.println("Sat i kø: " + tekst); for (int i = 0; i < 5; i++) kø.notify(); producentkonsument.lægikø("tal " + i); public void run() while (true) try synchronized (kø) while (!kø.isempty()) //String s = (String) kø.remove(kø.size() - 1); String s = (String) kø.remove(0); Thread.sleep(450); System.out.println("Konsumeret: " + s); kø.wait(); catch (InterruptedException ie) System.err.println("afbrudt"); Thread.sleep(100); for (int i = 0; i < 5; i++) producentkonsument.lægikø("talb " + i);
9 Designmønstret Trådpulje Problem: Mange opgave skal udføres. Det er for resursekrævende at oprette en ny tråd per opgave. Løsning: Lad en Objektpulje varetage og genbruge trådene. Lad klienter få opgaverne udført ved at sætte dem i kø i trådpuljen. Mange forskellige implementationer i java.util.concurrent F.eks. ThreadPoolExecutor Kun i JDK 1.5 Eksempel på implementation på de følgende sider Afsnit : Genbrug af tråde
10 Designmønstret Trådpulje import java.util.*; public class Traadpulje private List ledige = new ArrayList(); // Listen over ledige arbejdstråde /** Læg en opgave i kø til en arbejdstråd */ public synchronized void startopgave(runnable opgave) Arbejder a; if (ledige.isempty()) a = new Arbejder(); // ingen arbejdstråde ledige, en ny oprettes a.setdaemon(true); // tillad systemet at lukke ned selvom tråden er aktiv System.out.println("Ny arbejdstråd oprettet."); a.start(); else synchronized(ledige) a = (Arbejder) ledige.remove(ledige.size()-1);// tag arbejdstråd fra liste synchronized(a) if (a.opgave!= null) throw new InternalError("Tråden kører allerede"); a.opgave = opgave; a.notify(); // væk arbejdstråden der venter i wait()
11 Designmønstret Trådpulje /** * Arbejds-tråden. * Den er stærkt bundet til puljen så den er lagt som en privat indre klasse. */ private class Arbejder extends Thread private Runnable opgave = null; public final synchronized void run() while (true) try if (opgave!= null) System.out.println(this+" virker nu på "+opgave); opgave.run(); // udfør opgaven opgave = null; //... og glem den (!) synchronized(ledige) ledige.add(this); // læg tråd tilbage i listen System.out.println(this+" venter på opgave."); this.wait(); // vent på at blive vækket med notify() catch (Exception e) System.err.println(this+": Fejl opstod i opgave "+opgave); e.printstacktrace(); // slut på run() // slut på den indre klasse Arbejder
12 JDK 1.5: java.util.concurrent Pakken java.util.concurrent.atomic AtomicBoolean, AtomicInteger, AtomicReference,... Udelelige operationer (så man slipper for synchronized), a la int getandset(int newvalue) int addandget(int delta) int getanddecrement() boolean compareandset(int expect, int update) Pakken java.util.concurrent.locks ReentrantLock Reentrant (samme tråd kan låse flere gange) ReentrantReadWriteLock Læse og skrivelås (flere kan godt læse samtidig) Nedgradere fra skrivelås til læselås muligt Pakken java.util.concurrent ConcurrentHashMap, CopyOnWriteArrayList,... Køer til variationer af Producent Konsument designmønstret ArrayBlockingQueue, DelayQueue, PriorityBlockingQueue, SynchronousQueue Trådpuljer ThreadPoolExecutor, ScheduledThreadPoolExecutor
13 Flertrådede grafiske programmer Swing og AWT er ikke trådsikre!!! Forestil dig at de var: Så skulle hver eneste set metode være synkroniseret!! => hurtigere, mindre kode, nemmere at fejlfinde etc Grafiske brugergrænseflader er sjældent flertrådede => kun GUI tråden (Event Dispatching Thread) må bruges! Kun denne tråd må kalde metoder i og ændre i grafiske komponenter! Dog må revalidate() og repaint() kaldes fra enhver tråd Ofte, men ikke altid, går det godt alligevel selvom en anden tråd kalder
14 Flertrådede grafiske programmer Hvordan få et foretaget fra GUI tråden? Man kan lave et Runnable objekt og få det udføret fra GUI tråd SwingUtilities.invokeLater( Runnable r ) SwingUtilities.invokeAndWait( Runnable r ) Større opgaver/beregninger Brug SwingWorker klassen Sværere at forstå Ikke del af standardbiblioteket Gentagne hændelser javax.swing.timer får GUI tråden til at kalde actionperformed() på objekt
15 Afprøvning (test) Vigtigt hvis man ønsker programmer af høj kvalitet Formål: At finde (logiske) fejl Psykologisk modstrid Jo tidligere fejl findes, desto lettere (og dermed billigere) er det at finde dem. Afprøvning bør foregå på alle stadier af udviklingsprocessen. Unit testing: Hver enhed (klasse) afprøves uafhængigt før enhederne integreres i hele systemet. Integrations og systemtest: Afprøve delene og hele systemet samlet. Accepttest/slutbrugertest: Sikrer at sytemet opfører sig som forventet af brugeren.
16 Afprøvningsstrategier Blackbox testing Afprøvning af delens grænseflade til resten af systemet. Whitebox testing Afprøvning sker i forhold til at man ved hvordan delens er implementeret (den indre logik og kodestruktur).
17 Blackbox Testing Ækvivalensinddeling: Mængden af det mulige input inddeles i ækvivalensklasser. Grænseværdier bør afprøves. Mængden af det mulige input bør indeholde både gyldigt og ugyldige input. Positiv afprøvning: Testtilfælde som forventes at gå godt. Negativ afprøvning: Testtilfælde som forventes at gå galt. JUnit Et system til Unit testing (Blackbox afprøvning af klasser). Regressionstest Tidligere test som er gået godt bør gentages hver gang der er foretaget ændringer i klassen.
18 JUnit i praksis De fleste udviklingsværktøjer har JUnit indbygget JBuilder demo BlueJ Kan interaktivt optage afprøvningseksempler demo
Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter
Videregående programmering i Java
Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter
Objektorienterede metoder
Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags
Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004
Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret
Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java
Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger
Videregående programmering i Java
Videregående programmering i Java Dag 3 Skabende designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Eksempel: Forskellige slags
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2
DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld
Databaseadgang fra Java
Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,
University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11
DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void
Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004
Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3
DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget
Singleton pattern i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.
SWC eksamens-spørgsmål. Oversigt
SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition
SigmaT.
Java + Groovy Disposition Om SigmaT Eksempel på indlejring af Groovy Overvågning af PEM Ønske om dynamisk loaded Java uden at fifle med classloaderen Groovy til hjælp Opsamling hvad jeg ikke har fortalt
RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).
Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer
Software Construction 1 semester (SWC) Spørgsmål 1
Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /
Eksempel på en database: studenter, kurser, eksamener
Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser
DM502. Peter Schneider-Kamp ([email protected]) http://imada.sdu.dk/~petersk/dm502/
DM502 Peter Schneider-Kamp ([email protected]) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!
A Profile for Safety Critical Java
A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren
Løsning af møntproblemet
Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet
Hvordan vælger jeg dokumentprofilen?
Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel
Mandatory Assignment 1
Mandatory Assignment 1 Morten Franck Peter Hansen 9. oktober 2003 Gruppe 4, Parallelle Systemer (02220) Indhold 1 Trin 1 Petri Net 1 1.1 Model af pass().................................... 1 1.2 Model
Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation
Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et
Webserverprogrammering
Webserverprogrammering WSP fortsat - dag 11 Behandling af XML (StAX) Syndikering og RSS med XML JAXB - XML Java-objekter Projekthjælp Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html
Ugeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
Test af It-komponent
Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side
Tree klassen fra sidste forelæsning
Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years
//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!
Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for
PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;
PROGRAM using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace EventManager class Program static void Main(string[] args) string hovedmenu = ""; string svar;
Videregående programmering i Java
Videregående programmering i Java VPJ dag 1 Introduktion og overblik over kurset Datastrukturer: Lister, mængder og iteratorer Opsamling: Grafikprogrammering, komponenter, containere og layout Bruge komponenter
Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.
Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19
DANMARKS TEKNISKE UNIVERSITET
DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til [email protected]. Besvarelsen skal
Kursusarbejde 3 Grundlæggende Programmering
Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................
Fundamentale sprogbegreber
Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn) Oversigt Sætninger simple sætninger (assignment, metodekald) sammensatte sætninger (selektion,
MySQL i Java. Tutorial lavet af Jákup W. Hansen TSU 2006 2.semester 05.januar 2007
MySQL i Java Tutorial lavet af Jákup W. Hansen TSU 2006 2.semester 05.januar 2007 Hvad er MySQL? Det er et database system, som er gratis for os at bruge. Det er lidt mere besværligt i starten at bruge
Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api
Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...
BRP 6.9.2006 Kursusintroduktion og Java-oversigt
BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang Kursusintroduktion:
Skriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2
Kursusarbejde 2 Grundlæggende Programmering
Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................
Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations
Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University
Hvad er Objekter - Programmering
Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som
Abstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Java-opgraderingskursus
Java-opgraderingskursus Danmarks Meteorologiske Institut Gang 2 Webprogrammering Klient server og forespørgsel/svar HTML og HTML formularer Servletter og JSP sider Fælles biblioteker Programmere i pakker
