HOJ Säikeet (Java) Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/55

Koko: px
Aloita esitys sivulta:

Download "HOJ Säikeet (Java) Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/55"

Transkriptio

1 HOJ Säikeet (Java) Ville Leppänen HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/55

2 Missä mennään Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI ja J2EE (3h) 7. RPC (1h) 8. WWW-sovellustekniikoista (2h) 9. Pilvialustat (4h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) + 1h pelivaraa HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.2/55

3 Luennosta Yleistä säikeistä Säikeiden elinkaari ja prioriteetit. Säikeiden muodostus Luokka Thread Säikeiden välinen keskustelu Säikeiden välisen yhteistoiminnan koordinointi Tiedon jakaminen säikeiden kesken Esimerkkejä HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.3/55

4 Yleistä säikeistä 1/4 Tutustuttu jo: tapahtumankäsittelysäie ja main -säie. Voidaan luoda ja käynnistää itse. Säie: peräkkäinen käskyvirta. Samanaikaisuus rinnakkaisuus. Säie prosessi. Monen ongelman ratkaisun ilmaiseminen rinnakkain luonnollista. Koneessa useita prosessoreita = aidosti samanaikaan suoritettavia prosesseja. Kyky reagoida moneen suuntaan. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.4/55

5 Yleistä säikeistä 2/4 Perustuu työn jakamiseen, mutta seurauksena on usein myös tietojen jakaminen. Javan säikeet jakavat muistiavaruuden. Tiedon käytön koordinointi tärkeää: samanaikainen käyttö voi johtaa ongelmatilanteisiin. Samanaikaisten päivitysten seurauksena ehkä epäkonsistentti tila. Lukeminen: myös ongelmia. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.5/55

6 Multithreading Sovellus 1 Käyttöjärjestelmä Sovellus 2 Javan JVM Säie 1 paikallinen muisti Säie 2 paikallinen muisti Globaali muisti Säie 3 paikallinen muisti HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.6/55

7 Yleistä säikeistä 3/4 Lukitsemalla tietorakenteita (olioita) tai estämällä usean säikeen pääsy samanaikaisesti metodiin voidaan ratkaista ongelmia. Mutta... lukitsemisen seurauksena voi tulla syklejä = jumiutuminen. Lisäksi: säikeille annettavaa aikaa pitää jotenkin kontrolloida. Kaikkien pitää saada aikaa, muuten starvation. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.7/55

8 Lukkiutuminen Aika Säie 1 L1 ottaa lukon L1 L2 odottaa lukkoa L2 Säie 2 L2 ottaa lukon L2 L1 odottaa lukkoa L1 HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.8/55

9 Yleistä säikeistä 4/4 Käytännön seikkoja: Javaa suoritetaan usein tulkitsemalla. Tulkitseva JVM on yksi koneen KJ:n prosessi. Koneen KJ jakaa aikaa prosessien välillä. Javan säikeitä suoritetaan JVM:n sisällä. JVM:llä on KJ:n prosessien hallintaominaisuudet. (Tilanne on osin muuttunut: mahdollista käyttää useita KJ:n säikeitä.) Ei siis kovin helposti tehoa monesta prosessorista, mutta silti hyödyllistä esim. animoinnissa ja verkkoyhteyksissä. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.9/55

10 Raita: säikeiden tilat Suorituksen loppuminen normaalisti tai epänormaalisti Päättynyt (kuollut) Säie valitaan suoritukseen Valmis Säie käynnistetään start komennolla Suorituksessa Aikakvantti loppunut, yield, interrupt IO suoritettu, uniaika loppunut, notify, notifyall IO pyyntö, sleep, wait Estynyt Uusi Säie luodaan HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.10/55

11 Raita: prioriteeteista MAX_PRIORITY p1 p2 p3 MIN_PRIORITY p4 HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.11/55

12 Säikeiden muodostus Säikeet ovat olioita! Kaksi tapaa muodostaa suorituskelpoinen säie. Tapa 1: Peritään luokasta Thread ja luodaan sen mukainen olio. Perittäessä kirjoitetaan säikeen toiminta run -metodiin. Tapa 2: Tehdään luokka X, joka toteuttaa rajapinnan Runnable ja sen run -metodin. Luodaan Thread-luokan olio antamalla parametriksi X:n olio. Säikeen tietosisällön muodostaminen erilaista. Vaikka tapa 1 perustuu perintään (extends), se ei ole erityisen rajoittavaa, koska... Moniperintä : tehdään sisäluokan mukainen Thread:n perivä luokka. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.12/55

13 Thread class PrimeThread extends Thread { private long minprime; PrimeThread(long minprime) { this.minprime = minprime; } } public void run() { // compute primes larger than minprime... } PrimeThread p = new PrimeThread(143); p.start(); HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.13/55

14 Runnable class PrimeRun implements Runnable { private long minprime; PrimeRun(long minprime) { this.minprime = minprime; } } public void run() { // compute primes larger than minprime... } PrimeRun p = new PrimeRun(143); new Thread(p).start(); HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.14/55

15 Luokka Thread 1/3 Ominaisuudet: prioriteetti, nimi ja säieryhmä, suorituskelpoinen kohde (itse, jos ei määrätty). Thread(ThreadGroup g, Runnable r, String n) Yleisin konstruktori. Ryhmä g, kohde r, nimi n ja sama prioriteetti kuin käynnistävällä säikeellä. setpriority, getpriority, setname, getname static Thread currentthread() Palauttaa säie-olion, josta metodia kutsutaan. void start() Käsketään aloittamaan kohdesäikeen suoritus (JVM kutsuu sen run :a). Luo toisen samanaikaisen käskyvirran. void run() Suoritettava koodi. Jos määritelty kohde, HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.15/55 suoritetaan sen run. Thread.run on tyhjä.

16 Luokka Thread 2/3 void interrupt() Keskeytetään kohdesäikeen suoritus. SecurityException: ei oikeutta. static boolean interrupted() Onko keskeytetty jonkun toimesta; kutsu nollaa interrupted-tilan. boolean isinterrupted() Onko kohdesäie keskeytetty? Sen tilaa ei muuteta. static void yield() Keskeyttää kutsuvan säikeen antaen suoritusvuoron seuraavalle. static void sleep(... ) Säie nukkuu ajan.... InterruptedException: toinen säie keskeyttää tämän. final boolean isalive() Onko säie vielä elossa? HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.16/55

17 Luokka Thread 3/3 final ThreadGroup getthreadgroup() Palauttaa säieryhmän. static int activecount() Montako aktiivista säiettä kutsuvan säikeen ryhmässä? static int enumerate(thread[] q) Kerää q:n kaikki tämän ryhmän säikeet, myös aliryhmistä. Palauttaa lukumäärän. final void join(... ) Odottaa... -ajan kohdesäikeen päättymistä. 0= ikuisesti. final void setdaemon(boolean b) Asettaa daemon-statuksen. Ennen start :a. final boolean isdaemon() Onko daemon-prosessi? HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.17/55

18 ThreadTester.java 1/2 public class ThreadTester { public static void main( String args[] ) { PrintThread säie1, säie2, säie3, säie4; säie1 = new PrintThread("Säie1"); säie2 = new PrintThread("Säie2"); säie3 = new PrintThread("Säie3"); säie4 = new PrintThread("Säie4"); System.err.println("\nSäikeiden käynnistys."); säie1.start(); säie2.start(); säie3.start(); säie4.start(); System.err.println( "Käynnistetty.\n" ); } // main } // ThreadTester HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.18/55

19 ThreadTester.java 2/2 class PrintThread extends Thread { private int sleeptime; public PrintThread(String name) { super(name); sleeptime = (int) (Math.random() 5000 ); System.err.println( "Nimi: " + getname() + "; Unessa: " + sleeptime ); } // PrintThread(String) public void run() { try { System.err.println(getName() + "menee nukkumaan" ); Thread.sleep(sleepTime); } catch (InterruptedException exception) { System.err.println( exception.tostring() ); } System.err.println(getName() + "heräsi" ); } // run } // PrintThread HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.19/55

20 ThreadTester: suoritus Nimi: Säie1; Unessa: 470 Nimi: Säie2; Unessa: 4677 Nimi: Säie3; Unessa: 1097 Nimi: Säie4; Unessa: 2419 Säikeiden käynnistys. Käynnistetty. Säie1 menee nukkumaan Säie2 menee nukkumaan Säie3 menee nukkumaan Säie4 menee nukkumaan Säie1 heräsi Säie3 heräsi Säie4 heräsi Säie2 heräsi HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.20/55

21 Raita: säikeiden tilat Suorituksen loppuminen normaalisti tai epänormaalisti Päättynyt (kuollut) Säie valitaan suoritukseen Valmis Säie käynnistetään start komennolla Suorituksessa Aikakvantti loppunut, yield, interrupt IO suoritettu, uniaika loppunut, notify, notifyall IO pyyntö, sleep, wait Estynyt Uusi Säie luodaan HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.21/55

22 Säikeiden tilasiirtymät 1/4 Säie on olio, jolla on havainnoitava tila. Samalla siihen liittyy käskyvirta. Tila päättynyt: run (tai vast) suoritettu loppuun. Ei voi enää uudelleen aktivoida. Tila suorituksessa: käytetään prosessoriaikaa (vain yksi tässä tilassa!). yield: luovutaan lopusta aikaviipaleesta. ( Seuraava valmis saa prosessorin.) sleep, join, wait: keskeytetään suoritus. Tehdään IO:ta Odotetaan sen päättymistä. Kohdataan lukko Odotetaan vapautumista. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.22/55

23 Säikeiden tilasiirtymät 2/4 Tila valmis: valmiina suoritukseen, odotetaan prosessoriaikaa. interrupt: joku keskeyttää säikeen: siirtyy valmis-tilaan. IO päättyi. Lukko vapautui (tai joku kertoi sen vapautuneen). Odotettiin säiettä, joka päättyi. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.23/55

24 Säikeiden tilasiirtymät 3/4 Tila estynyt: odotetaan jotakin ennen kuin voidaan tavoitella jatkamista. I/O:n loppuminen. sleep: suorituksessa estynyt wait: suorituksessa estynyt; Jokin toinen säie: nofity tai notifyall. Edellisiä sovelletaan johonkin olioon: lukitus & vapautus. synchronized: suorituksessa estynyt; jos olio lukittu; odottaa lukon vapautumista. interrupt: estynyt valmis. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.24/55

25 Säikeiden tilasiirtymät 4/4 join: odotetaan kunnes säikeen suoritus loppunut. wait lukko! Pitää saada ilmoitus (notify tai notifyall). wait: täytyy omata lukko nykyiseen olioon (se vapautetaan samalla). Jatkaminen edellyttää lukon saamista uudelleen! Tavallaan wait ilmaisee, että odotetaan jokin ehdon täyttymistä itse ehtoa ei kuitenkaan ilmaista mitenkään! HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.25/55

26 Counter.java class Counter implements Runnable { public Counter(int mi,int ma) { min = mi; max = ma; } public void run() { int m = getmax(); for ( int i = getmin(); i m; i++) { System.out.print(i + ); try { // Annetaan muillekin säikeille tilaisuus. Thread.sleep(100); } catch (InterruptedException e) { } } // for System.out.println(); } // run public int getmin() { return min; } public int getmax() { return max; } private final int min, max; // Range } // Counter HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.26/55

27 Coordinator.java 1/3 class Coordinator implements Runnable { private final int numcounters = 3; private final Thread[] counters = new Thread[numCounters]; protected Thread[] getcounters() { return counters; } public Coordinator() { initcounters(); } protected void initcounters() { Thread[] counters = getcounters(); for (int i = 0; i < counters.length; i++) { // Annetaan kullekin luotavalle säikeelle // oma toiminta-alueensa. final int min = 10 i+1, max = min+9; counters[i] = new Thread(new Counter(min,max)); } // for System.out.println("Säikeet luotu."); } // initcounters HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.27/55

28 Coordinator.java 2/3 public void run() { Thread mythread = Thread.currentThread(); int mypriority = mythread.getpriority(); Thread[] counters = getcounters(); for (int i = 0; i < counters.length; i++) { // Lasketaan säikeiden prioriteettia, jotta ne // eivät lähtisi käyntiin ennen aikojaan. counters[i].setpriority(mypriority-1); counters[i].start(); } // for System.out.println("Kaikki valmiina."); waitforcounterstofinish(mypriority); System.out.println("Kaikki säikeet ovat lopettaneet."); } // run HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.28/55

29 Coordinator.java 3/3 protected void waitforcounterstofinish(int mypriority) { // Lasketaan omaa prioriteettia, jotta alisäikeet // pääsevät suoritukseen. Thread mythread = Thread.currentThread(); mythread.setpriority(mypriority-1); do { try { Thread.sleep(500); } catch (InterruptedException e) { } } while (stillrunning()); } // waitforcounterstofinish protected boolean stillrunning() { // Loppuehto: Palauttaa arvon true, jos yksikin // säie on käynnissä. Thread[] counters = getcounters(); for (int i = 0; i < counters.length; i++) if (counters[i].isalive()) return true; return false; } // stillrunning } // Coordinator HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.29/55

30 Coordinator: suoritus Säikeet luotu. Kaikki valmiina Kaikki säikeet ovat lopettaneet. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.30/55

31 waitforcounterstofinnish (b) protected void waitforcounterstofinish(int mypriority) { Thread mythread = Thread.currentThread(); mythread.setpriority(mypriority-1); Thread[] counters = getcounters(); for (int i = 0; i < counters.length; i++) { // Anticipate being interrupted before the join is complete. boolean interrupted; do { try { interrupted = false; counters[i].join(); } catch (InterruptedException e) { interrupted = true; } } while(interrupted); } HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.31/55

32 Samanaikaisuuden ongelmista Halutaan jakaa tietoja, mutta tehdä niiden samanaikaiset muutokset kontrolloidusti. Miten välittää tietoa säikeeltä toiselle? Miten ajoittaa säikeiden suoritus? Esim. kuluttaja + tuottaja -tilanne. Miten taata, että säikeet saavat suoritusaikaa? Lukitusten avulla voidaan tehdä muutokset kontrolloidusti (olion eheys säilyy), mutta samanaikaiset lukot voivat johtaa lukkiumatilanteisiin. Valitettavasti yleistä lukkiumat välttävää ratkaisua ei ole. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.32/55

33 Javan ratkaisuista 1/2 Lukitus: olio voidaan lukita; siihen kiinnitetään monitori (mutex; mutually exclusive lock), joka sallii vain yhden säikeen operoivan oliolla kerrallaan. Varattu sana synchronized. Voidaan liittää metodeihin: kyseisiä metodeja saa käyttää vain yksi säie kerrallaan. Ei voida liittää luokka- tai instanssimuuttujiin. Voidaan liittää myös lausekkeeseen (olioon); sama vaikutus. Vaikka olioon on lukko, niin muut säikeet voivat käyttää olion ei-synkronoituja piireitä vapaasti. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.33/55

34 Javan ratkaisuista 2/2 Object.wait(... ): jäädään odottamaan jonkin asian/ehdon tapahtumista. Edellyttää lukkoa olioon; soveltaminen vapauttaa lukon. Object.notify(): ilmoitetaan, että asia tapahtunut. Edellyttää lukkoa olioon; antaa lukon jollekin sitä odottavista säikeistä. Object.notifyAll(): kaikki odottajat valmis -tilaan; joku saa lukon. Muut jäävät sitä odottamaan. Ongelma: kuka vapauttaa kaikki odottajat? Jonkun täytyy ensin ottaa lukko ja käyttää sitä sitten muiden vapauttamiseen. Vastuu!! wait & nofity:n idea on pyrkiä vähentämään lukkiumatilanteita. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.34/55

35 PrimeMaker.java class PrimeMaker extends Thread { private DataOutputStream out; public PrimeMaker(DataOutputStream o) { out = o; } public void run() { int newvalue = 1; try { while (newvalue < 10000) { newvalue = newvalue + 1; boolean isprime = true; for ( int i=2; i i newvalue; i++ ) if (newvalue % i == 0) { isprime = false; break; } if (isprime) { System.out.println("writing new prime " + newvalue); out.writeint(newvalue); } } // while out.close(); } catch (IOException e) { return; } } // run HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.35/55

36 FibMaker.java import java.io. ; class FibMaker extends Thread { private DataOutputStream out; public FibMaker(DataOutputStream o) { out = o; } public void run() { int n=0; int m=1; try { out.writeint(m); while (m < 10000) { int newvalue = n+m; n = m; m = newvalue; System.out.println("writing new Fibo " + newvalue); out.writeint(newvalue); } // while out.close(); } catch (IOException e) { return; } } // run } // FibMaker HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.36/55

37 PipeReader: idea putkesta PrimeMaker PipeReader FibMaker HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.37/55

38 PipeReader.java 1/2 import java.io. ; public class PipeReader { static public void main(string[] args) { PipeReader world = new PipeReader(System.out); } private PipeReader(PrintStream out) { DataInputStream fibs = makefibs(); DataInputStream primes = makeprimes(); try { int x = fibs.readint(), y = primes.readint(); while (x < 10000) { if (x == y) { out.println("integer " + x + "is both fib and prime"); x = fibs.readint(); y = primes.readint(); } else if (x < y) x = fibs.readint(); else y = primes.readint(); } // while } catch (IOException e) { System.exit(0); } } // PipeReader(PrintStream) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.38/55

39 PipeReader.java 2/2 private DataInputStream makefibs() { try { PipedInputStream in = new PipedInputStream(); PipedOutputStream out = new PipedOutputStream(in); Thread fibthread = new FibMaker(new DataOutputStream(out)); fibthread.start(); return new DataInputStream(in); } catch (IOException e) { return null; } } // makefibs private DataInputStream makeprimes() { try { PipedInputStream in = new PipedInputStream(); PipedOutputStream out = new PipedOutputStream(in); Thread primethread = new PrimeMaker(new DataOutputStream(out)); primethread.start(); return new DataInputStream(in); } catch (IOException e) { return null; } } // makeprimes } // PipeReader HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.39/55

40 PipeReader: suorituksessa writing new Fibo 1 writing new Fibo 2 writing new Fibo 3 writing new Fibo 5... writing new Fibo writing new prime 2 writing new prime 3 writing new prime 5 writing new prime 7... writing new prime 643 Integer 2 is both fib and prime Integer 3 is both fib and prime Integer 5 is both fib and prime Integer 13 is both fib and prime Integer 89 is both fib and prime Integer 233 is both fib and prime writing new prime 647 HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.40/55

41 SharedData.java 1/3 public class SharedData { HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.41/55

42 SharedData.java 1/3 public class SharedData { private int sharefib = 0; private int shareprime = 0; private boolean writeablefib = true; private boolean writeableprime = true; HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.41/55

43 SharedData.java 1/3 public class SharedData { private int sharefib = 0; private int shareprime = 0; private boolean writeablefib = true; private boolean writeableprime = true; public synchronized void setfib(int newvalue) { } // setfib HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.41/55

44 SharedData.java 1/3 public class SharedData { private int sharefib = 0; private int shareprime = 0; private boolean writeablefib = true; private boolean writeableprime = true; public synchronized void setfib(int newvalue) { while (!writeablefib) { try { wait(); } catch (InterruptedException e) { e.printstacktrace(); } } // while } // setfib HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.41/55

45 SharedData.java 1/3 public class SharedData { private int sharefib = 0; private int shareprime = 0; private boolean writeablefib = true; private boolean writeableprime = true; public synchronized void setfib(int newvalue) { while (!writeablefib) { try { wait(); } catch (InterruptedException e) { e.printstacktrace(); } } // while System.out.println(Thread.currentThread().getName() + "setting sharefib to " + newvalue); sharefib = newvalue; writeablefib = false; notifyall(); } // setfib HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.41/55

46 SharedData.java 2/3 public synchronized void setprime(int newvalue) { while (!writeableprime) { try { wait(); } catch (InterruptedException e) { e.printstacktrace(); } } // while System.out.println(Thread.currentThread().getName() + "setting shareprime to " + newvalue); shareprime = newvalue; writeableprime = false; notifyall(); } // setprime HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.42/55

47 SharedData.java 2/3 public synchronized void setprime(int newvalue) { while (!writeableprime) { try { wait(); } catch (InterruptedException e) { e.printstacktrace(); } } // while System.out.println(Thread.currentThread().getName() + "setting shareprime to " + newvalue); shareprime = newvalue; writeableprime = false; notifyall(); } // setprime public synchronized int getprime() { } // getprime HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.42/55

48 SharedData.java 2/3 public synchronized void setprime(int newvalue) { while (!writeableprime) { try { wait(); } catch (InterruptedException e) { e.printstacktrace(); } } // while System.out.println(Thread.currentThread().getName() + "setting shareprime to " + newvalue); shareprime = newvalue; writeableprime = false; notifyall(); } // setprime public synchronized int getprime() { while (writeableprime) { try { wait(); } catch (InterruptedException e) { e.printstacktrace(); } } // while } // getprime HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.42/55

49 SharedData.java 2/3 public synchronized void setprime(int newvalue) { while (!writeableprime) { try { wait(); } catch (InterruptedException e) { e.printstacktrace(); } } // while System.out.println(Thread.currentThread().getName() + "setting shareprime to " + newvalue); shareprime = newvalue; writeableprime = false; notifyall(); } // setprime public synchronized int getprime() { while (writeableprime) { try { wait(); } catch (InterruptedException e) { e.printstacktrace(); } } // while writeableprime = true; System.out.println(Thread.currentThread().getName() + "retrieving shareprime value " + shareprime); notifyall(); return shareprime; } // getprime HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.42/55

50 SharedData.java 3/3 public synchronized int getfib() { while (writeablefib) { try { wait(); } catch (InterruptedException e) { e.printstacktrace(); } } // while writeablefib = true; System.out.println(Thread.currentThread().getName() + "retrieving sharefib value " + sharefib); notifyall(); return sharefib; } // getfib } // SharedData HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.43/55

51 FibThread.java public class FibThread extends Thread { } // FibThread HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.44/55

52 FibThread.java public class FibThread extends Thread { private SharedData handle; } // FibThread HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.44/55

53 FibThread.java public class FibThread extends Thread { private SharedData handle; public FibThread(SharedData sd) { super("fibthread"); handle = sd; } public void run() { } // run } // FibThread HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.44/55

54 FibThread.java public class FibThread extends Thread { private SharedData handle; public FibThread(SharedData sd) { super("fibthread"); handle = sd; } public void run() { int n=0, m=1; handle.setfib(m); } // run } // FibThread HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.44/55

55 FibThread.java public class FibThread extends Thread { private SharedData handle; public FibThread(SharedData sd) { super("fibthread"); handle = sd; } public void run() { int n=0, m=1; handle.setfib(m); while (m < 1000) { int newvalue = n+m; n = m; m = newvalue; handle.setfib(newvalue); } // while } // run } // FibThread HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.44/55

56 PrimeThread.java public class PrimeThread extends Thread { private SharedData handle; public PrimeThread(SharedData sd) { super("primethread"); handle = sd; } public void run() { int newvalue = 1; while (newvalue < 1000) { newvalue = newvalue + 1; boolean isprime = true; for ( int i=2; i i newvalue; i++ ) if (newvalue % i == 0) { isprime = false; break; } if (isprime) { handle.setprime(newvalue); } } // while } // run } // PrimeThread HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.45/55

57 ReaderThread.java public class ReaderThread extends Thread { private SharedData handle; ReaderThread(SharedData sd) { super("readerthread"); handle = sd; } public void run() { int x = handle.getfib(); int y = handle.getprime(); while (x < 1000) { if (x == y) { System.out.println("Integer " + x + "is both fib and prime"); x = handle.getfib(); y = handle.getprime(); } else if (x < y) x = handle.getfib(); else y = handle.getprime(); } // while } // run } // ReaderThread HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.46/55

58 SharedDataTest.java public class SharedDataTest { public static void main(string[] args) { SharedData sd = new SharedData(); Thread ft = new FibThread(sd); Thread pt = new PrimeThread(sd); Thread rt = new ReaderThread(sd); ft.start(); pt.start(); rt.start(); } // main } // SharedDataTest HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.47/55

59 SharedDataTest: suoritus FibThread setting sharefib to 1 ReaderThread retrieving sharefib value 1 PrimeThread setting shareprime to 2 FibThread setting sharefib to 1 ReaderThread retrieving shareprime value 2 ReaderThread retrieving sharefib value 1 PrimeThread setting shareprime to 3 FibThread setting sharefib to 2 ReaderThread retrieving sharefib value 2 Integer 2 is both fib and prime FibThread setting sharefib to 3 ReaderThread retrieving sharefib value 3 ReaderThread retrieving shareprime value 3 Integer 3 is both fib and prime PrimeThread setting shareprime to 5 FibThread setting sharefib to 5 ReaderThread retrieving sharefib value 5 ReaderThread retrieving shareprime value 5 Integer 5 is both fib and prime HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.48/55

60 Synkronoinnista lisää 1/2 synkronoitu lohko synchronized (lauseke) { /* Lauseita; lukitus on päällä */ } Lohkon suorituksen ajaksi hankitaan lukko lauseke :n arvona olevaan olioon. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.49/55

61 Synkronoinnista lisää 2/2 Synkronoinnin käytön vähentäminen: } public synchronized void method() { // Ei-kriittinen osa; // Kriittinen osa; // Ei-kriittinen osa; public void method() { // Ei-kriittinen osa; synchronized(this) { /* Kriittinen osa; */ } // Ei-kriittinen osa; HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.50/55

62 Prosessiryhmät Ideana on jakaa prosessit ryhmiksi, koska oletusarvoisesti saman ryhmän prosessit voivat vaikuttaa toistensa suoritukseen. Sama pätee aliryhmiin. Oletusarvoisesti säie kuuluu samaan ryhmään kuin sen luova säie. Turvallisuusmanageri kontrolloi asiaa. new ThreadGroup( Nimi ). Perustettavasta ryhmästä tulee perustajasäikeen ryhmän aliryhmä. JVM: voi suorittaa useita appletteja samanaikaisesti. Kunkin appletin säikeet sijoitetaan eri ryhmään. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.51/55

63 GroupCoordinator.java 1/2 class GroupCoordinator implements Runnable { public GroupCoordinator() { initcounters(); } protected void initcounters() { Thread[] counters = getcounters(); ThreadGroup group = getgroup(); for (int i = 0; i < counters.length; i++) { final int min = 10 i+1, max = min+9; counters[i] = new Thread(group, new Counter(min,max)); } System.out.println("All counters created."); } // initcounters public void run() { Thread[] counters = getcounters(); for ( int i = 0; i < counters.length; i++) counters[i].start(); System.out.println("All counters ready to run."); waitforcounterstofinish(); System.out.println("All the threads have finished."); HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.52/55 } // run

64 GroupCoordinator.java 2/2 protected void waitforcounterstofinish() { ThreadGroup group = getgroup(); do try { Thread.sleep(500); } catch (InterruptedException e) { } while (group.activecount() > 0); } // waitforcounterstofinish protected Thread[] getcounters() { return counters; } protected ThreadGroup getgroup() { return countergroup; } private final int numcounters = 3; private final Thread[] counters = new Thread[numCounters]; private final ThreadGroup countergroup = new ThreadGroup("counters"); } // GroupCoordinator HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.53/55

65 Demonit Demoni eli taustaprosessi. Prosessi voidaan määritellä tällaiseksi luonnin ja käynnistämisen välissä. Statusta ei voi muuttaa. Luonnin yhteydessä prosessit perivät isäntäprosessinsa statuksen. Idea on, että demonit palvelevat normaaleja user-säikeitä. Jos JVM:ssä ei muuta kuin demoneja, JVM:n suoritus lopetetaan ja demonit tapetaan. Esim. roskien kerääjä voisi olla demoni. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.54/55

66 Yhteenveto Säikeet ovat olioita. JVM:n tapa käsitellä säikeitä. Luonti: Thread, Runnable. Tilat, siirtymien syyt. Tiedon jakaminen ja sen hallinta: lukitukset. synchronized. Prioriteetti. Säieryhmä. Demoni. Soveltaminen? GUIhin? Verkkosovellusten yhteydessä? Animointi? HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.55/55

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi

Lisätiedot

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä Luento 6 T-106.1240 Ohjelmoinnin jatkokurssi T1 & T-106.1243 Ohjelmoinnin jatkokurssi L1 Luennoitsija: Otto Seppälä Kurssin WWW: http://www.cs.hut.fi/opinnot/t-106.1240/s2007 Oma Grafiikka Swing-käyttöliittymässä

Lisätiedot

Hajautettujen sovellusten muodostamistekniikat (Java-kielellä), TKO_2014 Aineopinnot, syksy 2009 Turun yliopisto / Tietotekniikka

Hajautettujen sovellusten muodostamistekniikat (Java-kielellä), TKO_2014 Aineopinnot, syksy 2009 Turun yliopisto / Tietotekniikka Hajautettujen sovellusten muodostamistekniikat (Java-kielellä), TKO_2014 Aineopinnot, syksy 2009 Turun yliopisto / Tietotekniikka c Ville Leppänen This page is intentionally left blank. Esipuhe Tämän oppimateriaalin

Lisätiedot

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla Lasse Leino ja Marko Kahilakoski Helsingin Yliopisto Tietojenkäsittelytieteen laitos Rinnakkaisohjelmointi 18. joulukuuta 2006 Sisältö 1 Säikeet

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 19: Rinnakkaisuus Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 24. 3. 2011 Sisältö 1 Säikeet 2 Lukot 3 Monitorit 4 Muuta säikeisiin

Lisätiedot

Rinnakkaisohjelmointi, Syksy 2006

Rinnakkaisohjelmointi, Syksy 2006 Rinnakkaisohjelmointi, Syksy 2006 17.12.2006 Opintopiiri WTF Mika Holmström Paula Kemppi Janne Piippo Lasse Lukkari Javan semaforit 1. Menetelmän käyttötarkoitus ja sovellusalue Semaforin idea kehitettiin

Lisätiedot

Monitorit -projekti Rinnakkaisohjelmointi

Monitorit -projekti Rinnakkaisohjelmointi Monitorit -projekti Rinnakkaisohjelmointi 13.12.2006 Jaakko Louhio, Lari Sorvo Projektin tuloksia, kertaustehtäviä ja koodeja saa käyttää opetukseen yliopistolla vapaasti omalla vastuulla. 3. MONITORIT

Lisätiedot

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen Helsingin Yliopisto, tietojenkäsittelytieteen laitos Rinnakkaisohjelmointi (syksy 2006) Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen a. Käyttötarkoitus ja sovellusalue

Lisätiedot

812315A Ohjelmiston rakentaminen. Asynkronisuus

812315A Ohjelmiston rakentaminen. Asynkronisuus 812315A Ohjelmiston rakentaminen. Asynkronisuus Ari Vesanen ari.vesanen (at) oulu.fi Yleistä moduulista Tällä kertaa sisältää Java-kielistä monisäieohjelmointia Suoritustapa: Neljästä ohjelmointitehtävästä

Lisätiedot

HOJ Kertausluento. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/58

HOJ Kertausluento. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/58 HOJ Kertausluento Ville Leppänen HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/58 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

Javan semaforit. Joel Rybicki, Aleksi Nur mi, Jara Uitto. Helsingin yliopisto

Javan semaforit. Joel Rybicki, Aleksi Nur mi, Jara Uitto. Helsingin yliopisto Javan semaforit Joel Rybicki, Aleksi Nur mi, Jara Uitto 16.12.2007 Helsingin yliopisto Tietojenkäsittelytieteen laitos Tätä ohjetta saa käyttää ja jatkokehittää opetustarkoituksiin. Javan semaforitoteutus

Lisätiedot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki Tehtävä 1 Koherentti selitys Koherentti esimerkki ½p ½p Tehtävä 2 Täysiin pisteisiin edellytetään pelaajien tulostamista esimerkin järjestyksessä. Jos ohjelmasi tulostaa pelaajat jossain muussa järjestyksessä,

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2010 Välikoe / 26.3 Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään

Lisätiedot

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma. Välikoe / 20.3 Vastaa neljään (4) tehtävään. Jos vastaat 5:een, 4 huonointa arvostellaan. Kunkin tehtävän vastaus eri konseptille. 1. Pöytätesti Pöytätestaa seuraava ohjelma. Tutki ohjelman toimintaa pöytätestillä

Lisätiedot

Mikä yhteyssuhde on?

Mikä yhteyssuhde on? 1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

T Henkilökohtainen harjoitus: FASTAXON

T Henkilökohtainen harjoitus: FASTAXON T-76.115 Henkilökohtainen harjoitus: FASTAXON Suunnittelumallit Group: Muuntaja Pentti Vänskä 52572W 2 1. Toteutus Tämä henkilökohtainen harjoitustyö käsitteli suunnittelumallien (Design Patterns) käyttöä

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

Rinnakkaisuus. Juha Järvensivu 2008

Rinnakkaisuus. Juha Järvensivu 2008 Rinnakkaisuus Juha Järvensivu juha.jarvensivu@tut.fi 2008 Sisällys Rinnakkaisuus ja käyttöliittymäohjelmointi GUI-thread.NET rinnakkaisuus Asynkroninen delegaatti (.NET) Timerit Backgroundworker (.NET)

Lisätiedot

10 Lock Lock-lause

10 Lock Lock-lause 10 Lock Avainsanan lock (Lock keyword) avulla voidaan toteuttaa prosessien ja säikeiden välisessä keskinäisessä kommunikoinnissa käytettäviä synkronointi- ja poissuljentarakenteita. Tämän niin sanotun

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

Lisätiedot

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Graafisen käyttöliittymän ohjelmointi Syksy 2013 TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Syksy 2013 Luento 10 Rinnakkaisuus käyttöliittymäohjelmoinnissa Juha-Matti Vanhatupa Rinnakkaisuus ja käyttöliittymäohjelmointi

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Poikkeukset Poikkeuksella tarkoitetaan yllättävää ajonaikaista tilannetta, joka

Lisätiedot

5/20: Algoritmirakenteita III

5/20: Algoritmirakenteita III Ohjelmointi 1 / syksy 2007 5/20: Algoritmirakenteita III Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/17 Tämän

Lisätiedot

Java ja grafiikka. Ville Sundberg 12.12.2007

Java ja grafiikka. Ville Sundberg 12.12.2007 Java ja grafiikka Ville Sundberg 12.12.2007 What happen Viritetty JPanel Graphics ja Graphics2D ImageIO ja BufferedImage Animaatio ja ajastus Optimoinnista Kehykset import javax.swing.jframe; public class

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java kahdessa tunnissa. Jyry Suvilehto Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,

Lisätiedot

RINNAKKAINEN OHJELMOINTI A,

RINNAKKAINEN OHJELMOINTI A, RINNAKKAINEN OHJELMOINTI 815301A, 18.6.2005 1. Vastaa lyhyesti (2p kustakin): a) Mitkä ovat rinnakkaisen ohjelman oikeellisuuskriteerit? b) Mitä tarkoittaa laiska säikeen luominen? c) Mitä ovat kohtaaminen

Lisätiedot

11. Javan valintarakenteet 11.1

11. Javan valintarakenteet 11.1 11. Javan valintarakenteet 11.1 Sisällys If- ja if-else-lauseet. Orpo else. Valintaa toisin: switch-lause. 11.2 If-lause Merkitään varatulla sanalla if. Kuvaa yksisuuntaisen päätöksen: rakenteen lauseet

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Rinnakkaisuus Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 4. 2012 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

HOJ RMI = Remote Method Invocation

HOJ RMI = Remote Method Invocation HOJ RMI = Remote Method Invocation Ville Leppänen HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/37 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista

Lisätiedot

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 HSMT Tietokannoista Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++ JAVA alkeet JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++ ja Javascriptin kanssa. Huom! JAVA ja JavaScript eivät silti ole sama asia, eivätkä edes sukulaiskieliä.

Lisätiedot

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja

Lisätiedot

Poikkeustenkäsittely

Poikkeustenkäsittely 1 Poikkeustenkäsittely Mitä poikkeustenkäsittely tarkoittaa? Poikkeuksen käsitteleminen Poikkeusluokkien hierarkia Poikkeuksen heittäminen 1 Mitä poikkeustenkäsittely tarkoittaa? Poikkeus (Exception) on

Lisätiedot

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka Rinnakkaisuus parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa Rinnakkaisuuden etuja: laskennan nopeutuminen (sarjoittuvat operaatiojonot) ilmaisuvoima (ongelman

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

Luokan sisällä on lista

Luokan sisällä on lista 1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä

Lisätiedot

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava

Lisätiedot

Jaana Diakite Projekti 1 JAVA-Monitorit 1(13) Rinnakkaisohjelmointi Anu Uusitalo

Jaana Diakite Projekti 1 JAVA-Monitorit 1(13) Rinnakkaisohjelmointi Anu Uusitalo Jaana Diakite Projekti 1 JAVA-Monitorit 1(13) JAVA MONITORIT Monitorien käyttötarkoitus ja sovellusalue Monitorit ovat Java ohjelmointikielen sisäänrakennettu mekanismi säikeiden rinnakkaisuuden hallintaan.

Lisätiedot

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet Metodit Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin return; -lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua Metodi voi palauttaa alkeistyypin tai olion Tällöin

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 IX Rinnakkainen ohjelmointi Sisältö 1. Yleistä rinnakkaisuudesta 2. Prosesseista ja säikeistä 3. Rinnakkaisen ohjelman oikeellisuudesta 4. Rinnakkaisuuden

Lisätiedot

4. Luento: Prosessit ja säikeets. Tommi Mikkonen, tommi.mikkonen@tut.fi

4. Luento: Prosessit ja säikeets. Tommi Mikkonen, tommi.mikkonen@tut.fi 4. Luento: Prosessit ja säikeets Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Prosessi Säikeet Keskeytykset Keskeytyskäsittely Käyttöjärjestelmäkutsut Prosessielementti Prosessin hallinta Suunnittelunäkökohtia

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Luokat ja oliot. Ville Sundberg

Luokat ja oliot. Ville Sundberg Luokat ja oliot Ville Sundberg 12.9.2007 Maailma on täynnä olioita Myös tietokoneohjelmat koostuvat olioista Σ Ο ω Μ ς υ φ Ϊ Φ Θ ψ Љ Є Ύ χ Й Mikä on olio? Tietokoneohjelman rakennuspalikka Oliolla on kaksi

Lisätiedot

Mitä poikkeuskäsittely tarkoittaa?

Mitä poikkeuskäsittely tarkoittaa? Poikkeuskäsittely Mitä poikkeuskäsittely tarkoittaa? Poikkeuskäsittelyluokkien hierakkia Poikkeuksen sieppaaminen Mihin järjestykseen try-catch-lauseen ExceptionType-poikkeukset laitetaan? Poikkeuksen

Lisätiedot

Ohjelmointityö 3. Mikko Laamanen 185667

Ohjelmointityö 3. Mikko Laamanen 185667 Ohjelmointityö 3 Mikko Laamanen 185667 Sisällysluettelo Tehtävän määrittely ja ratkaisuperiaate... 1 Tehtävän määrittely... 1 Ratkaisuperiaate... 1 Ohjelman käyttöohje... 1 Syötteet ja tulosteet... 1 Ohjelman

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

16. Javan omat luokat 16.1

16. Javan omat luokat 16.1 16. Javan omat luokat 16.1 Sisällys Johdanto. Object-luokka: tostring-, equals-, clone- ja getclass-metodit. Comparable-rajapinta: compareto-metodi. Vector- ja ArrayList-luokat. 16.2 Javan omat luokat

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Semaforit Javassa. Mari Kononow, Eveliina Mattila, Sindi Poikolainen HELSINGIN YLIOPISTO

Semaforit Javassa. Mari Kononow, Eveliina Mattila, Sindi Poikolainen HELSINGIN YLIOPISTO Semaforit Javassa Mari Kononow, Eveliina Mattila, Sindi Poikolainen 13.12.2008 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ohjetta saa käyttää opetukseen ja jatkokehitykseen Johdanto Semaforeja

Lisätiedot

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) 1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden

Lisätiedot

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöteja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen

Lisätiedot

Java-API, rajapinnat, poikkeukset, UML,...

Java-API, rajapinnat, poikkeukset, UML,... Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

public static void main (String [] args)

public static void main (String [] args) HAAGA-HELIA OHJELMOINTI 1(5) OHJELMALUOKKA Ohjelma-luokan käynnistää public static void main (String [] args) main-metodiin voi koodata 1. ohjelman logiikan tai 2. luoda ohjelma-olion ja kutsua metodia,

Lisätiedot

Taulukoiden käsittely Javalla

Taulukoiden käsittely Javalla 1 Taulukoiden käsittely Javalla Mikä taulukko on? Taulukon syntaksi Merkkijonotaulukko Lukutaulukko Taulukon kopiointi 1 Mikä taulukko on? Taulukko on rakenne, minne saadaan talteen usea saman tyyppinen

Lisätiedot

Rinnakkaisuus (.NET) Juha Järvensivu 2007

Rinnakkaisuus (.NET) Juha Järvensivu 2007 Rinnakkaisuus (.NET) Juha Järvensivu juha.jarvensivu@tut.fi 2007 Sisällys Rinnakkaisuus ja käyttöliittymäohjelmointi GUI-thread Asynkroninen delegaatti System.Timers.Timer Backgroundworker Responsive GUI

Lisätiedot

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10 HOJ Haja-aiheita Ville Leppänen HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3 15. Lohkot 15.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.2 Lohkot Aaltosulkeet

Lisätiedot

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 26. Tiedostot 26.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja

Lisätiedot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot

Muuttujat ja kontrolli. Ville Sundberg

Muuttujat ja kontrolli. Ville Sundberg Muuttujat ja kontrolli Ville Sundberg 14.9.2007 Alkeistyyppi Alin abstraktiotaso josta tarvitsee välittää Yksittäinen, jakamaton tiedonjyvä Tavallaan kaikki alkeistyypit ovat lukuja arvojoukko vaihtelee

Lisätiedot

JAVA-OHJELMOINTI 3 op A274615

JAVA-OHJELMOINTI 3 op A274615 JAVA-OHJELMOINTI 3 op A274615 JFC & Swing, Look & Feel, Events Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2009 p.1/15 HSMT (Java-kielellä) Aineopintotasoinen kurssi, 5op. Luennot:

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot