Liebes Forum
Was ist der Unterschied, wenn ich eine Klasse mit "implements Runnable" oder mit "extends Thread" erstelle? In beiden Fällen habe ich die run() Methode, die implementiert werden muß. Ich verstehe das nicht so ganz, was das für Folgen hat. :rtfm:
Anbei habe ich zwei Klassen, die sich mit diesem Thema beschäftigen und beide o.g. Möglichkeiten innerhalb inneren Klassen benutzt. Einen Unterschied konnte ich da in der Ausführung nicht feststellen.
Diese Klasse liefert den Grundaufbau für eine Heizung
Diese Klasse spielt sozusagen die fluktuierende Raumtemperatur und weißt die Heizung an Wärme zu erzeugen oder eben nicht.
Viele Grüße,
Semo
Was ist der Unterschied, wenn ich eine Klasse mit "implements Runnable" oder mit "extends Thread" erstelle? In beiden Fällen habe ich die run() Methode, die implementiert werden muß. Ich verstehe das nicht so ganz, was das für Folgen hat. :rtfm:
Anbei habe ich zwei Klassen, die sich mit diesem Thema beschäftigen und beide o.g. Möglichkeiten innerhalb inneren Klassen benutzt. Einen Unterschied konnte ich da in der Ausführung nicht feststellen.
Diese Klasse liefert den Grundaufbau für eine Heizung
Java:
public class Heizung {
private double temp;
private double minTemp;
private double maxTemp;
public Heizung(double temp, double minTemp, double maxTemp) {
super();
this.temp = temp;
this.minTemp = minTemp;
this.maxTemp = maxTemp;
}
double getMaxTemp() {
return maxTemp;
}
double getMinTemp() {
return minTemp;
}
double getTemp() {
return temp;
}
/* Methode zur Temperaturerhoehung um tempDiff Grad */
void erhoeheTemp(double tempDiff) {
this.temp += tempDiff;
}
/* Methode zur Temperaturverringerung um tempDiff Grad */
void verringereTemp(double tempDiff) {
this.temp -= tempDiff;
}
/**
* Methode zur schrittweisen Temperaturerhoehung (temp) bis die
* Maximaltemperatur maxTemp erreicht ist
*/
public void heizen() {
while (temp < maxTemp) {
this.erhoeheTemp(0.000001);
}
}
}
Diese Klasse spielt sozusagen die fluktuierende Raumtemperatur und weißt die Heizung an Wärme zu erzeugen oder eben nicht.
Java:
public class Thermostat {
Heizung h = new Heizung(12, 18, 24);
public static void main(String[] args) {
Thermostat therm = new Thermostat();
Senken s = new Senken(therm.h);
Erhoehen er = new Erhoehen(therm.h);
Messen m = new Messen(therm.h);
Thread th1 = new Thread(s);
Thread th2 = new Thread(er);
Thread th3 = new Thread(m);
th1.start();
th2.start();
th3.start();
}
}
class Senken implements Runnable {
private Heizung h;
public Senken(Heizung h) {
this.h = h;
}
public void run() {
while (true) {
h.verringereTemp(0.2);
try {
Thread.sleep(1);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
class Erhoehen extends Thread {
private Heizung h;
public Erhoehen(Heizung h) {
this.h = h;
}
public void run() {
while (true) {
if (h.getTemp() <= h.getMinTemp()) {
h.heizen();
}
try {
Thread.sleep(1);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
class Messen extends Thread {
private Heizung h;
public Messen(Heizung h) {
this.h = h;
}
public void run() {
while (true) {
System.out.println(h.getTemp());
try {
Thread.sleep(1);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
Viele Grüße,
Semo