Sisällysluettelo
Säikeet
Säie on oma ohjelma, joka pyörii tausta-ajona. Käyttöjärjestelmissä on paljon säikeitä, jotka valvovat koneen toimintaa ja ohjaavat prosessoria.
Perusteita
Säie periytyy luokasta Thread ja siinä pitää olla metodi run() .Metodiin kirjoitetaan se koodi, jota tehdään silloin kun säiettä ajetaan.
Säikeen aloittaminen ja lopettaminen
Tehdään aluksi luokka, jota voidaan ajaa säikeenä. Luokka tulostaa 101 kertaa nimensä.
class Limukka extends Thread { private String nimi; Limukka(String n) //konstruktori { nimi = n; } public void run() { for(int i=0; i<=100; i++) { System.out.println(nimi); } } }
Kirjoitetaan sitten pääohjelma, joka luo kolme säiettä.
public class Yhtaikaa { public static void main(String args[]) { Limukka yksi = new Limukka("Kokis"); Limukka kaksi = new Limukka("Pepsi"); Limukka kolme = new Limukka("Jaffa"); yksi.start(); kaksi.start(); kolme.start(); } }
Ohjelman suoritus näyttää seuraavalta:
{{ java:saie.jpg }}
Huomaa, etteivät säikeet saa välttämättä vuorotellen vuoroaan, vaan joskus joku säie saattaa kaapata prosessorilta pitemmän ajan itselleen.
Miten sitten toimitaan, jos jokin luokka halutaan tehdä säikeeksi, mutta se on jo jonkin luokan perillinen. Tällöinhän luokkaa ei voida enää periyttää Thread-luokasta. Ratkaisu on rajapintaluokka Runnable. Luokkaan kirjoitetaan ihan kuten säikeessäkin run() metodi, mutta luokan määrittely muuttuu hiukan. Luodaan aluksi luokka Henkilö, josta luodaan perillinen Nainen:
class Henkilo { private String nimi; protected int ika=0; protected int elinika; public Henkilo(String n) { nimi = n; elinika = (int)(Math.random()*100); } public void tervehdi() { System.out.println("Terve, olen "+nimi+","+ika+" vuotta"); } }
Luokka Nainen periytyy Henkilö-luokasta, jolloin se ei voi enää periytyä Thread-luokasta. Jotta luokkaa voisi käyttää säikeenä, sen on toteutettava Runnable-rajapinta.
class Nainen extends Henkilo implements Runnable { public Nainen(String n) { super(n); } public void run() { for (;ika <= elinika; ika++) { tervehdi(); if (ika == 29) { System.out.println("Pääsin piireihin!"); } //Ja muuta naisen elämää... } } }
Ja lopuksi pääohjelma. Ohjelmassa luodaan ilmentymä (instanssi) Nainen luokasta (nimeltään eeva), joka asetetaan säikeessä elämään omaa elämäänsä.
class Paaohjelma { public static void main(String args[]) { Nainen eeva = new Nainen("Eeva"); Thread eevasaie = new Thread(eeva); eevasaie.start(); } }
