Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich würde gerne ein Übungs-Programm erstellen, bei dem ich mit mehreren Threads auf das selbe Objekt zugreife und in diesem Objekt dann einen Zähler erhöhe. Bislang habe ich folgende Klassen erstellt (Exceptions mal aussen vorgelassen):
Die Klasse die den Counter enthält:
Java:
public class Counter
{
//Counter initialisieren
private int counter = 0;
//Counter ausgeben
public void getCounter(){
System.out.println(counter);
}
//Counter erhoehen
public void counterErhoehen(){
counter++;
}
}
Die Klasse, die das Counterobjekt erstellt und die Threads aufruft/erstellt:
Java:
public class ThreadDemo
{
public static void main (String[] args)
{
//Counter-Objekt erstellen
Counter c1 = new Counter();
//Threads erstellen und das selbe Objekt übergeben
Thread t1 = new MeinThread01(c1);
Thread t2 = new MeinThread01(c1);
//Threads starten
t1.start();
t2.start();
//counter auslesen
c1.getCounter();
}
}
Die Klasse die den Counter erhöht bzw. den Thread darstellt
[Java]
import java.lang.*;
public class MeinThread01 extends Thread
{
public MeinThread01(Counter c1)
{
c1.counterErhoehen();
}
//Thread Start-Anweisung
public void run(){}
}
[/code]
Ich hab' die run-Methode jetzt leergelassen, weil ich nicht weiß wie ich auf das c1-Objekt über die Funktion zugreifen kann - ein neues Counter-Objekt erstellen und dem dann das c1-Objekt übergeben?- Um das dann auch lauffähig zu machen - mit mehreren Threads - müsste ich ja auch irgendeine Funktion haben, die den Zähler erhöht und die synchronisiert wird.
Vielen Dank im Voraus und ich hoffen nicht gegen irgendwelche Regeln verstoßen zu haben
Wenn du aus mehreren Threads in einem Objekt rumfummelst, solltest du dich etwas in die Synchronisierung einlesen.
Zu deinem Anliegen: Du kannst ja im Konstruktor einfach nur die Referenz abspeichern:
Java:
public class MeinThread01 extends Thread {
Counter c;
public MeinThread01(Counter c) {
this.c = c;
}
public void run(){
for (int i=0;i<100;i++) {
c.counterErhoehen();
Thread.sleep(100);
}
}
}
Oh man, ich bin total verwirrt ... tatsächlich reicht es ja aus wenn ich das c1-Objekt in eine Variable speichere, dazu brauch ich ja kein neues Objekt davon zu erstellen ... oje oje ^^