[Java lista] szálkezelés?

Jozsef Tabanyi joco at kac.duf.hu
2007. Jan. 30., K, 09:56:43 CET


Szija,

> Van-e valami más ok amiatt akkor is jobban járok ha implementálom a
> Runnable-t, minthogy örököljem a Thread osztályt?
Mivel a Java-ban nincs tobbszoros orokles, ezert ha az osztalyod a
Thread osztalybol szarmazik, akkor mar nem tud masbol.
Viszont a feladat gyakran megkoveteli, hogy masbol szarmaztasd az
osztalyod. Szoval szerintem inkabb ne szarmaztass a Thread-bol,
hanem ha szukseged van egy uj szalra, akkor az egy peldanyvaltozo
legyen, es a befogado osztaly meg implementalja a Runnable interfeszt.

Lehetne meg vaganykodni nevtelen belso osztalyokkal,
de szerintem te meg nem tartassz ott.

> Sok féle példát mutat a szállak leállítására.
A szalak leallitasanak egyetlen civilizalt modja, ha a vezerles
elhagyja a run() metodust. Tehat ha a run()-ban porog egy while
ciklus, akkor arrol kell gondoskodni, hogy ez valahogy leallithato
legyen. Az teljesen mindegy, hogy mi az a logikai feltetel, hogy
egy sima boolean valtozo vagy a Thread objektum referencioa null-ra
lett-e allitva. Ez a te szabad dontesed.

Es vegul egy egyszeru pelda:

public final class Engine implements Runnable {

	private Thread thread;

	/**
	 *
	 */
	public Engine() {
		super();
		// TODO Auto-generated constructor stub
	}


	public void start() {
		if(thread == null) {
			thread = new Thread(this);
			thread.start();
		}
	}

	public void run() {
		// TODO Auto-generated method stub
		while(thread != null) {

			//do something here

			try {
				Thread.sleep(100);//lets run other threads
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				stop();
				break;
			}
		}
	}

	public void stop() {
		thread = null;
	}
}


joco

Jozsef Tabanyi
mailto:jozsef at tabanyi.hu
http://www.tabanyi.hu
On Tue, 30 Jan 2007, [iso-8859-2] Maglódszki Viktor wrote:

> Sziasztok !
>
> Már nem is tudom, hogy hová soroljam a levelet :) Legyen szálkezelés az egyszerûség kedvéért.
> Szeretném kihangsúlyozni, hogy a tegnapi nap elolvastam a kék Java könyv elsõ  kötetében a 15ös fejezetet "Párhuzamosság, szálkezelés".
> Már-már csak félve teszem fel kérdéseimet, amik némi zavarodásból adódnak, az itt és a könyvben olvasottakból.
> Igyekszem szépen érthetõen, pontokban összefoglalva irni ja és írásjeleket is igyekszem használni :)
>
> 1.
> Thread osztály öröklése és a Runnable interfész implementálása témakör.
> A könyv nagyon sok példában a Thread-et örökölteti, persze megemlíti (és igen értem is), hogy ott a Runnable is.
> Ha az osztályunk már öröklõdik akkor muszály az implementálás->ok ezt értem.
> Kérdésem:
> Van-e valami más ok amiatt akkor is jobban járok ha implementálom a Runnable-t, minthogy örököljem a Thread osztályt?
>
> 2.
> Sok féle példát mutat a szállak leállítására.
> Van az alap logikai változó
> while (isRunning()) .... féle megoldás running = false ha meg akarom állitani a szállat kivûlrõl egy synchronized stop metódusban
> a könyv szerint: "...gondoskodni kell egy volatile módosítással ellátott Thread típusú refernciáról ami a futó szálra mutat."
> private volatile boolean isRunning = true; (már tudom a volatile hatását is)
> ezt a példát egy olyan osztályon mutatja ami kiterjeszti a Thread-et
> "...a Runnable interfész esetén szükséges egy Thread, vagy annak egy alosztályára utaló referenciát definiálnunk..."
>
> private volatile Thread runningId = this;
> public void run() {
>  while (runningId == this) {
>  ...
>  }
> }
> stop() {
>  runningId = null;
> }
>
> viszont amiben ezt a példát mutatja az is extends Thread
> bár simán lehet, hogy csak nem furcsa
> azt mondja a könyv, hogy a Runnable-nél kell ilyen, erre bemutatja egy olyan osztályon ami extends Thread
> kérdésem: van-e valami számottevõ különbség a kettõ között?
>
> elõre is köszönöm!
>
> üdv, MV



További információk a(z) Javalist levelezőlistáról