Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;)

JasminM

Mitglied
Hallo Leute, ich bin neu hier und bereite mich gerade auf eine Klausur vor. Ich hoffe ihr könnt mir helfen, da ich gerade vor lauter Bäumen den Wald nicht sehe:

Gegeben ist folgender Code:
Java:
public class CommonObjectV1 {
	public int counter = 0;
	public void printAndIncrement(String name){
		for (int i = 0; i < 5; i++){
			counter++;
			System.out.printlin(name + ": " + counter);
		}
	}
}

public class CommonObjectModifier {
	CommonObjectModifier(String name){
		this.modifierName = name;
	}
	
	public String modifierName;
	public static CommonObjectV1 common = new CommonObjectV1();
}

Jetzt soll man von CommonObjectModifier eine neue Klasse namens MultiThreadedCommonObjectModifier ableiten. Diese ist zum Teil gegeben und soll nur noch ergänzt werden:

Java:
public class MultiThreadedCommonObjectModifier{
	

	
	public void run(){
		common.printAndIncrement(modifierName);
	}

}

Meine Frage ist jetzt:

1. Die Klasse MultiThreadedCommonObjectModifier darf laut Eclipse nicht von CommonObjectModifier vererben (also "extends CommonObjectModifier" ist ungültig) und erbt jetzt nur von der Superklasse "Thread" (aufgrund der run()-Methode). Aber wieso? In der Aufgabenstellung steht ja, dass es von Com... erben soll.

2. Die Klasse CommonObjectModifier verlangt jetzt einen String. Wie übergebe ich diesen String dieser Klasse über MultiThre...?

3. Diese Klasse CommonOb... erzeugt eine neue Instanz von CommonObjectV1, auf die run()-Methode dann zugreift. Das ist dann ja der kritische Bereich. Hab ich das richtig verstanden?

Ist ein bisschen länger her, dass ich etwas programmiert habe, deswegen seid mir ein wenig nachsichtig.
 

JasminM

Mitglied
Ok, ich glaub ich hab es teilweise:

Meine MultiThreadedCommonObjectModifier-Klasse wäre:

Java:
public class MultiThreadedCommonObjectModifier extends CommonObjectModifier implements Runnable{
	

	
	
	
	MultiThreadedCommonObjectModifier(String name) {
		super(name);

	}
	

	public void run(){
		common.printAndIncrement(modifierName);
	}

}
 

Hutzli

Aktives Mitglied
Versuche es jetzt mal trotzdem.
Der kritische Bereich befindet sich in der printAndIncrement Methode wo du den counter veränderst, da deine CommonObjectV1 Instanz static ist. Es gibt also nur eine für sämtliche Instanzen von deiner Klasse CommonObjectModifier. Wenn du jetzt mehrere dieser Threads gleichzeitig startest, wird immer dieselbe printAndIncrement Methode aufgerufen und dementsprechend derselbe counter erhöht, beziehungsweise Code durchgeführt. Mach mal diese print Methode synchronized, damit verhinderst du, dass mehrere Threads gleichzeitig darauf zugreifen (Vielleicht reicht es auch, wenn du nur die Mutation des Counters auf synchronized stellst, bin mir da nicht ganz sicher).
Ich verstehe nicht ganz, was dieses Beispiel aussagen soll, geschweige denn ist der Code grauenhaft. ;)
 

JasminM

Mitglied
Vielen lieben Dank.

Das Beispiel ist aus einer ehemaligen Klausur. Und die Vorschläge von dir werden in darauf folgenden Fragen nochmal erläutert.

Kannst du mir sagen, was das "static" genau macht? Was würde passieren, wenn man es weglässt?
 

Hutzli

Aktives Mitglied
Also, mit static definierst du eine Klassenvariable oder eine Klassenmethode.
Das bedeutet, du musst in deinem Beispiel keine Instanz von CommonObjectModifier erzeugen, um darauf zuzugreifen: CommonObjectModifier.common (Aufruf von common).
Für jede deiner Instanz von CommonObjectModifier ist das Objekt common immer dasselbe.
Wenn du static weglässt, wird das common Objekt immer neu erzeugt, jede Instanz hat demnach ein eigenes Objekt.

Hier ein Beispiel (Kopiers mal und führ es aus, hilft bestimmt dem Verständnis):

Java:
public class ObjectWithStatic
{
	// Counter wird genau einmal erzeugt und ist ohne Objekterzeugung zugänglich.
	// Jede Instanz wird denselben counter hochzählen, da static.
	public static int smCounter = 0;
	
	// Dieser counter wird für jede Instanz neu erstellt.
	// Jede Instanz hat einen eigenen counter.
	// Um darauf Zugriff zu erhalten, muss ein Objekt von dieser Klasse erzeugt werden.
	private int mCounter;
	
	private String mName;
	
	public ObjectWithStatic( String pName )
	{
		this.mCounter = 0;
		this.mName = pName;
	}
	
	public void increment()
	{
		for( int i = 0; i < 5; i++ )
		{
			mCounter++;
			smCounter++;
			System.out.println("Object: " + mName + " InstanzCounter: " + mCounter + "   ClassCounter: " + smCounter );
		}
	}
}

Java:
public class TestStatic
{
	public static void main( String[] args )
	{
		// Zugriff ohne Instanziierung. Ausgabe 0
		System.out.println( ObjectWithStatic.smCounter );
		
		// Zwei Objekte erzeugen.
		ObjectWithStatic lStatic1 = new ObjectWithStatic( "Obj1" );
		ObjectWithStatic lStatic2 = new ObjectWithStatic( "Obj2" );
		
		// Inkrementiere counter von obj1 und Klassencounter hoch
		lStatic1.increment();
		// Inkrementiere counter von obj2 und Klassencounter hoch
		lStatic2.increment();
		
		// Wird 10 geben, da jedes deiner Objekte denselben Counter hochzählt
		System.out.println( ObjectWithStatic.smCounter );

	}

}

Durch static wird also aus jedem deiner Threads dasselbe Objekt aufgerufen, dadurch wird auch derselbe counter hochgezählt. Würdest du static weglassen, dann würde für jedes deiner Objekte also auch ein neues CommonObjectV1 erzeugt. Statische Member benutzt man übrigens zum Beispiel um die Instanzen einer Klasse zu zählen. Also ein static counter, der im Konstruktor hochgezählt wird.

Hoffe, dass das so verständlich genug ist ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
BadBat Multi Threading Java Basics - Anfänger-Themen 2
A Threading & GUI Java Basics - Anfänger-Themen 6
B Threading Problem ? Null-Exception Java Basics - Anfänger-Themen 3
P Threading-Problem Java Basics - Anfänger-Themen 3
-horn- Mehrkern-Threading für Anfänger?! :) Java Basics - Anfänger-Themen 14
zilti Threading-Problem Java Basics - Anfänger-Themen 3
Jere58 Aufgabe zu Mustern Java Basics - Anfänger-Themen 1
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
Justin4687 Benötige Hilfe bei folgender Aufgabe Java Basics - Anfänger-Themen 2
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
R Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
Mikejr Java Berg aufgabe Java Basics - Anfänger-Themen 6
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ich die Aufgabe richtig gelöst? Java Basics - Anfänger-Themen 3
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
T Informatik Studium Aufgabe Java Basics - Anfänger-Themen 4
T Aufgabe Informatik Studium Java Basics - Anfänger-Themen 10
I matrix aufgabe Java Basics - Anfänger-Themen 22
J Brauche Hilfe bei for-each Aufgabe Java Basics - Anfänger-Themen 1
9 Aufgabe Bruttorechner Java Basics - Anfänger-Themen 14
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
J Brauche Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
J boolean aufgabe Java Basics - Anfänger-Themen 9
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
M Hilfe - Array Aufgabe Java Basics - Anfänger-Themen 8
StevenGG Aufgabe im Studium Java Basics - Anfänger-Themen 36
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
S Schulaufgabe - verstehe leider die Aufgabe nicht Java Basics - Anfänger-Themen 4
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
R Eclipse Aufgabe Java Basics - Anfänger-Themen 4
J OOP-Aufgabe Java Basics - Anfänger-Themen 15
Helix19 Informatik Grundkurs (Haus-)Aufgabe Java Basics - Anfänger-Themen 5
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
TimoN11 Java spezielle Suchprobleme - Aufgabe Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Aufgabe Hilfe Java Basics - Anfänger-Themen 18
jonathanpizza Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
Q Hilfe auf Aufgabe(Matrixmultiplikation) Java Basics - Anfänger-Themen 1
jonathanpizza Hilfe bei der Aufgabe Java Basics - Anfänger-Themen 19
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Rechnungen-Aufgabe Java Basics - Anfänger-Themen 18
C Biene-Aufgabe Java Basics - Anfänger-Themen 2
K Algorithmen und Datenstrukturen Programmier Aufgabe Java Basics - Anfänger-Themen 10
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Aufgabe Flussdiagramm, kann jemand checken? Java Basics - Anfänger-Themen 8
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Lösung Aufgabe - Java Programmiren lernen für Dummies Java Basics - Anfänger-Themen 11
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
F Aufgabe: Abstand von einem Punkt zu einem anderen Punkt Java Basics - Anfänger-Themen 10
T Aufgabe zum Verschlüsselungsalgorithmus Java Basics - Anfänger-Themen 11
J Erste Schritte Aufgabe Java Basics - Anfänger-Themen 24
T Methoden BinaryTree transformieren Aufgabe Java Basics - Anfänger-Themen 36
J Brauche Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 1
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
S Sortieralgorithmus - Aufgabe mit Lösungsidee Java Basics - Anfänger-Themen 20
A Aufgabe: Gleitkommazahlen Java Basics - Anfänger-Themen 3
A Java-Programmierungs Aufgabe Java Basics - Anfänger-Themen 2
U Aufgabe zu Kontrollstrukturen Java Basics - Anfänger-Themen 8
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
J Aufgabe als Feuertaufe Java Basics - Anfänger-Themen 8
S Unbedingte hilfe bei Java Aufgabe [Schleife / Zinsrechnung] Java Basics - Anfänger-Themen 14
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
S Hilfe bei Java Aufgabe (Schleifen) Java Basics - Anfänger-Themen 25
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
B BITTE!! Ich brauche dringende Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 17
H aufgabe 4 Java Basics - Anfänger-Themen 297
M Hilfe bei Projektorientierungs-Aufgabe !! Java Basics - Anfänger-Themen 3
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
H java aufgabe Java Basics - Anfänger-Themen 7
E Mathematische Aufgabe: Antwort entspricht nicht der Lösung Java Basics - Anfänger-Themen 5
H was verlangt die aufgabe ? Java Basics - Anfänger-Themen 10
H java aufgabe Java Basics - Anfänger-Themen 68
H java aufgabe Java Basics - Anfänger-Themen 25
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
R Java Aufgabe (Teilbarkeit) Java Basics - Anfänger-Themen 7
H java aufgabe Java Basics - Anfänger-Themen 44
H java aufgabe Java Basics - Anfänger-Themen 7
H java string aufgabe Java Basics - Anfänger-Themen 10
H array aufgabe Java Basics - Anfänger-Themen 13
D Erste Schritte Lösen dieser Aufgabe, Hilfe! Java Basics - Anfänger-Themen 12
H aufgabe Java Basics - Anfänger-Themen 9
H lösung aufgabe Java Basics - Anfänger-Themen 12
S Hilfe für Aufgabe Java Basics - Anfänger-Themen 4
H java online aufgabe Java Basics - Anfänger-Themen 4
H Array aufgabe Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben