od Betlista » 2. 2. 2010 13:08
V Jave sú principiálne 2 spôsoby ako vytvoriť vlákno, tak ako tu už bolo ukázané - oddedením z Thread.
Druhým spôsobom je implementovaním rozhrania Runnable, takto:
Kód: Vybrat vše
new Thread(
new Runnable() {
@Override
public void run() {
System.out.println( "runnable" );
}
}
).start();
Je potreba si uvedomiť, že nie vždy budete mať možnosť zmeniť hierarchiu tried. Vtedy keď si zmyslíte že potrebujete aby niečo bolo vláknom, tak nebude možné oddediť od triedy Thread (ako iste viete, tak v Jave je jednoduchá dedičnosť) a potom sa to urobí tak, že o danej triede prehlásite, že implementuje Runnable a jej inštanciu potom spustíte podobne ako je to ukázané vyššie, len s tým rozdielom, že tam som použil anonymnú triedu.
Volanie start() v konštruktore by som nedoporučoval, aj keď to síce funguje (ako sa zdá), tak život vlákna je definovaný spôsobom, že vlákno končí keď sa ukončí vykonávanie metódy run(), lenže v tomto prípade konštruktor (vytváranie inštancie) skončí neskôr ako metóda run(), čo je dosť podivné.
V Jave sú principiálne 2 spôsoby ako vytvoriť vlákno, tak ako tu už bolo ukázané - oddedením z Thread.
Druhým spôsobom je implementovaním rozhrania Runnable, takto:
[code]
new Thread(
new Runnable() {
@Override
public void run() {
System.out.println( "runnable" );
}
}
).start();
[/code]
Je potreba si uvedomiť, že nie vždy budete mať možnosť zmeniť hierarchiu tried. Vtedy keď si zmyslíte že potrebujete aby niečo bolo vláknom, tak nebude možné oddediť od triedy Thread (ako iste viete, tak v Jave je jednoduchá dedičnosť) a potom sa to urobí tak, že o danej triede prehlásite, že implementuje Runnable a jej inštanciu potom spustíte podobne ako je to ukázané vyššie, len s tým rozdielom, že tam som použil anonymnú triedu.
:!: Volanie start() v konštruktore by som nedoporučoval, aj keď to síce funguje (ako sa zdá), tak život vlákna je definovaný spôsobom, že vlákno končí keď sa ukončí vykonávanie metódy run(), lenže v tomto prípade konštruktor (vytváranie inštancie) skončí neskôr ako metóda run(), čo je dosť podivné.