Skip to content

Commit 94870dc

Browse files
committed
Rinnakkaisuuteen pari tarkennusta
1 parent 7a83fda commit 94870dc

2 files changed

Lines changed: 6 additions & 5 deletions

File tree

docs/10_annotaatiot.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ Nimestä voi päätellä, että annotaatio liittyy merkkijonon pituuteen. Täss
4949
public class Product {
5050
private int id;
5151
@StringLengthRule(minlen = 2, maxlen = 8)
52-
private String Name;
52+
private String name;
5353

5454
public Product(int id, String name) {
5555
this.id = id;
56-
Name = name;
56+
this.name = name;
5757
}
5858
// ... loput luokan koodista jätetty pois
5959
```

docs/11_rinnakkaisuus.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class DemoSäie implements Runnable {
9595
}
9696
}
9797
```
98-
Usein on tarpeen tietää milloin säie on päättynyt. Säikeen suoritus päättyy, kun run()-metodi on suoritettu tai koodi kaatuu virheeseen. Säie ei ilmoita päättymisestä silloin kun käytetään säikeitä tähän mennessä näkyvien esimerkkien mukaisesti. On olemassa myös toimintomalli, jossa saadaan ilmoitus käynnistävälle koodille säikeen päättymisestä. Muutoin on vaihtoehtona kysyä pollaamalla säikeen tilaa tai 'liittyä' säikeeseen join()-metodilla. Näissä pitää huolehtia mahdollisesta poikkeuksesta. Metodi sleep() aiheuttaa säikeen siirtymisen pois suorituksesta parametrina olevan millisekuntimäärän ajaksi. Pollaavassa versiossa kannattaa odottaa tovi ennen kuin kysyy uudelleen säikeen tilaa isAlive()-metodilla. Pollaus tarkoittaa sitä, että kysytään (poll) säikeen tilaa, koodissa siis aktiivisesti seurataan säikeen suorituksen tilaa.
98+
Usein on tarpeen tietää milloin säie on päättynyt. Säikeen suoritus päättyy, kun run()-metodi on suoritettu loppuun tai koodi kaatuu virheeseen. Säie ei ilmoita päättymisestä silloin kun käytetään säikeitä tähän mennessä näkyvien esimerkkien mukaisesti. On olemassa myös toimintomalli, jossa saadaan ilmoitus käynnistävälle koodille säikeen päättymisestä. Muutoin on vaihtoehtona kysyä pollaamalla säikeen tilaa tai 'liittyä' säikeeseen join()-metodilla. Näissä pitää huolehtia mahdollisesta poikkeuksesta. Metodi sleep() aiheuttaa säikeen siirtymisen pois suorituksesta parametrina olevan millisekuntimäärän ajaksi. Pollaavassa versiossa kannattaa odottaa tovi ennen kuin kysyy uudelleen säikeen tilaa isAlive()-metodilla. Pollaus tarkoittaa sitä, että kysytään (poll) säikeen tilaa, koodissa siis aktiivisesti seurataan säikeen suorituksen tilaa.
9999

100100
```java
101101
while (t3.isAlive()) { // join() on parempi!
@@ -106,7 +106,7 @@ while (t3.isAlive()) { // join() on parempi!
106106
}
107107
System.out.println("Säie 3 päättynyt");
108108
try {
109-
t2.join();
109+
t2.join(); // tämä on oikea tapa, ei kuluta resursseja
110110
} catch (InterruptedException e) {
111111
}
112112
System.out.println("Säie 2 päättynyt");
@@ -167,7 +167,8 @@ Todellisuudessa tämä koodi toimii vain vahingossa oikein. Jos lisätään kier
167167

168168
Olemme päätyneet tilanteeseen, josta käytetään termiä Critical Section (kriittinen alue). Critical section on koodia, joka pitää suorittaa säikeessä atomaarisesti niin, ettei muut säikeet pääse suorittamaan samaa koodia tai käsittelemään samaa muuttujaa. Javassa tähän on ollut yksinkertainen ratkaisu olemassa jo aivan ensimmäisestä versiosta saakka ja se on synchronized sanalla toteutettavissa. Synchronized-toiminnolla saadaan lukittua koodilohko tai kokonainen metodi niin, että säie saa suorittaa metodin tai koodilohkon loppuun saakka ilman että mikään muu säie pääsee suorittamaan samaa koodia.
169169

170-
Koodilohkoa käytettäessä tarvitaan jokin olio lukitukseen. Jokaisessa Java-oliossa on sisäänrakennettu lukko-bitti, joka ei näy mitenkään, vaan se pitää tietää.
170+
Koodilohkoa käytettäessä tarvitaan jokin olio lukitukseen. Jokaisessa Java-oliossa on sisäänrakennettu lukko-bitti, joka ei näy mitenkään, vaan se pitää tietää. Kriittisen alueen toteutukseen käytetään Mutex-tyyppistä lukitusta (Mutual exclusion) josta syystä esimerkissä lukitukseen käytettävän muuttujan nimi on *mutex*.
171+
171172
Turvallinen ja toimiva nextID()-metodin toteutus voi olla seuraava:
172173

173174
```java

0 commit comments

Comments
 (0)