ReentrantLock oder Synchronized ?

derfreak

Mitglied
Hallo,

ich bin gerade beim Thema Threads und versuche nun Synchronized & ReentrantLock zu verstehen.
"Eigentlich habe ich, dass ganze so in etwa verstanden..."

Soweit ich es im Buch " Java ist auch nur eine Insel "verstanden habe, ist synchronized veraltet weshalb man deswegen auf ReentrantLock zurück greift.
Ich finde jedoch irgendwie Mühsam den kritischen Abschnitt zu suchen und dann fest zulegen.

F: Gibt es eine eine Methode um den Kritischen Abschnitt zu finden, auch dann wenn es fremder Code ist, beispielsweise in Klausuren?

Einfacher hingegen finde ich es, wenn ich einfach komplett alles in eine neue Methode Packe (z.b. wenn vorher alles in der void run() Methode war) und die neue Methode mit synchronized benennen.
Gleicher Effekt, soweit ich es getestet habe.

Beispiel: Code mit Lock.
Java:
class P1 extends Thread {

	public void run() {

		int x = (int) (Math.random() * 300) + 1;
		int y = x;

		for (int i = 0; i < 20; i++) {

			Main.lock.lock();
			// Kritischer Abschnitt:
			Main.p.x = x;
			Main.p.y = y;
			int xc = Main.p.x, yc = Main.p.y;
			Main.lock.unlock();

			if (xc != yc)

				System.out.println("Aha: x=" + xc + ", y=" + yc);
		}

	}

Beispiel: Code mit synchronized

Java:
class P1 extends Thread {

	public void run() {

		zaehler();

	}

	public static synchronized void zaehler() {
		int x = (int) (Math.random() * 300) + 1;
		int y = x;

		while (true) {
			Main.p.x = x;
			Main.p.y = y; 

			int xc = Main.p.x, yc = Main.p.y;

			if (xc != yc)

				System.out.println("Aha: x=" + xc + ", y=" + yc);
		}
	}

}



F: Meine Frage ist halt, was sollte man nun verwenden?
F: Gibt es da Regeln, wo man was benutzt?

Edit: Ich habe gerade gesehen, dass wenn ich bei der Methode zaehler(), static weg lasse, dass ganze nicht mehr funktioniert. Also xc NICHT gleich yc ist... weiß jemand vielleicht warum?



Vielen Dank!
 
Zuletzt bearbeitet:

derfreak

Mitglied
Ja, liegt am nebenläufigen Garbage Collector

Achso Danke! :)

Wie siehts mit den anderen Fragen aus, weißt du da auch mehr?

F: Was genau versteht man unter Monitor?
Bedeutet, dass nicht einfach, dass es eine Klasse ist die synchronisiert? Also wo jeder Thread nicht durch Schreibkonflikte von anderen Threads behindert wird, indem man es synchronisiert?
 
Zuletzt bearbeitet:

javampir

Bekanntes Mitglied
hi,
wenn du dich intensiver damit beschäftigst, mit der ganzen sichtbarkeitssache und so weiter, dann kann ich dir nur das buch "Java Core Programmierung" empfehlen.
javampir
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Threads ReentrantLock mehrfach verwenden Allgemeine Java-Themen 3
J Synchronized Probleme Allgemeine Java-Themen 7
B Threads synchronized Allgemeine Java-Themen 3
OnDemand Threads und synchronized Allgemeine Java-Themen 9
N Best Practice Semi-Synchronized Zugriff Allgemeine Java-Themen 0
E Verständnisfrage zu synchronized-Blöcken Allgemeine Java-Themen 3
J yield() Aufruf in einer synchronized-Methode Allgemeine Java-Themen 13
A Frage zu Synchronized Allgemeine Java-Themen 5
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
R synchronized methode rekursiv aufrufen Allgemeine Java-Themen 5
P synchronized Allgemeine Java-Themen 4
S komplexe synchronized bedingungen Allgemeine Java-Themen 6
G synchronized Allgemeine Java-Themen 7
J Threads und synchronized Allgemeine Java-Themen 18
hdi synchronized & volatile Allgemeine Java-Themen 10
G zwei mal synchronized Allgemeine Java-Themen 5
J synchronized block mit this und wait() Allgemeine Java-Themen 5
M Verständnis "synchronized" Allgemeine Java-Themen 4
T Thread synchronized Allgemeine Java-Themen 5
Kr0e Synchronized Allgemeine Java-Themen 4
K synchronized und notify / notifyAll Allgemeine Java-Themen 8
G synchronized-Sclüsselwort: welche Reihenfolge zum Betreten? Allgemeine Java-Themen 6
R synchronized "gegen sich selbst" Allgemeine Java-Themen 5
R ConcurrentModificationException trotz synchronized? Allgemeine Java-Themen 12
R Thread-Problem, und synchronized bringt nix Allgemeine Java-Themen 4
J synchronized (bitte beantworten, urgent! danke) Allgemeine Java-Themen 11
H Ein synchronized Block ausreichend? Allgemeine Java-Themen 6
G synchronized Klasse? Allgemeine Java-Themen 6
G synchronized + threads Allgemeine Java-Themen 12
A deadlocks bei synchronized Allgemeine Java-Themen 3
K vector, synchronized und mehrere methoden Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben