HOJ Säikeet (Java) Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/55
|
|
- Saara Mäkelä
- 7 vuotta sitten
- Katselukertoja:
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 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ätiedotLuento 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ätiedotHajautettujen 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ätiedotProjekti 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ätiedotOhjelmoinnin 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ätiedotRinnakkaisohjelmointi, 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ätiedotMonitorit -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ätiedotLiite 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ätiedot812315A 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ätiedotHOJ 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ätiedotJavan 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ätiedotYleistä. 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ätiedotVertailulauseet. 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ätiedotSisä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ätiedotOlio-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ätiedotTehtä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ätiedotSisä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ätiedot14. 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ätiedotOhjelmointi 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ätiedotOhjelmointi 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ätiedotMikä 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ätiedotSisä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ätiedotT 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ätiedotRajapinta (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ätiedotRinnakkaisuus. 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ätiedot10 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ätiedotSisä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ätiedotListarakenne (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ätiedotGraafisen 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ätiedotJava-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ätiedot14. 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ätiedotMetodit. 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ätiedotOlion 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ätiedotJAVA-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ätiedotOpintojakso 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ätiedot5/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ätiedotJava 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ätiedotOhjelmassa 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ätiedotJava 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ätiedotRINNAKKAINEN 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ätiedot11. 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ätiedotMetodien 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ätiedotOhjelmoinnin 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ätiedot812347A 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ätiedot7. 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ätiedotJavan 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ätiedotHOJ 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ätiedotLuokka 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ätiedot1. 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ätiedotHSMT 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ätiedotJAVA 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ätiedotKompositio. 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ätiedotPoikkeustenkä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ätiedotRinnakkaisuus. 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ätiedotHarjoitus 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ätiedot1 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ätiedotJava-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ätiedotLuokan 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ätiedotSisä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ätiedot11. 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ätiedot12. 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ätiedotOhjelmoinnin 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ätiedotTietokannat 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ätiedotJaana 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ätiedotMetodit 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ätiedot7. 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ätiedot815338A 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ätiedot4. 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ätiedot812341A 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ätiedotJava-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ätiedotLuokat 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ätiedotMitä 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ätiedotOhjelmointityö 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ätiedotEhto- 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ätiedot12. 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ätiedot16. 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ätiedot8. 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ätiedotSemaforit 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ätiedotA) 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ätiedotSisä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ätiedoton 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ätiedotJava-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ätiedotSisä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ätiedotpublic 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ätiedotTaulukoiden 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ätiedotRinnakkaisuus (.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ätiedot1.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ätiedotHOJ 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ätiedotLohkot. 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ätiedotSisä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ätiedotConcurrency - 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ätiedotSisä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ätiedotMuuttujat 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ätiedotJAVA-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ätiedot9. 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ätiedotHajautettujen 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ätiedotEhto- 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ätiedot9. 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ätiedotInformaatioteknologian 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ätiedot12. 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