lock notify synchronisation

MatheStein

Aktives Mitglied
Hey Leute,

hab glaube ich gerade ein Brett vorm Kopf :oops:

Warum ist es in Java so, dass "wait()" und "notify()" nur in synchronisierten Blöcken augerufen werden können? Irgendwie ist mir der Sinn dahinter gerade entfallen.


Gruß :)
 

MatheStein

Aktives Mitglied
Hey :)

Ja, aber warum? Warum kann ein Thread nicht auch ohne in Besitz eines Locks zu sein einfach in die "wait-queue" eingereiht werden? Hat das einen tieferen Sinn?
 
M

maki

Gast
Und worauf sollte er dann warten???

Schon mal einen Blick auf das Concurrency Framework geworfen?
Da gibt es eine BlockingQueue (und vieles mehr), ist einfacher als selber mit wait/notifyAll zu arbeiten.
 

Michael...

Top Contributor
Wenn der Thread dem Objekt sagen soll, dass er auf dessen Benachrichtung warten will, muss er ja (als einziger) Zugriff auf das Objekt haben.
 

MatheStein

Aktives Mitglied
Also, angenommen ich habe zwei Threads t1 und t2 und eine Variable x die beiden zugänglich ist.
Angenommen die Aufgabe von t1 ist x einmalig zu modifizieren und die von t2 x nach der Modifikation auszulesen, dann wäre es doch am besten, wenn t2 direkt beim start in die wait-queue eingereiht wird und t1 weckt t2 auf nachdem sie x erfolgreich modifiziert hat.
In diesem Fall sollte es hier zu keinen Race-Conditions kommen und somit wäre eine Synchronisation unnötig, trotzdem müssten t1 und t2 synchronisierten werden um wait() und notify() benutzen zu dürfen.

Das ist der Punkt an dem mich das ganze etwas irritiert.
 

MatheStein

Aktives Mitglied
das war jetzt nur ein simples Beispiel :) Mir ist auf die schnelle nichts besseres eingefallen.

Mit "Threads synchronisieren" meinte ich eher, dass um den Aufruf von wait() und notify() "unnötiger" Weise ein synchronized Block gelegt werden müsste (unnötig in dem Sinne, dass kein exklusiver Zugriff nötig ist, aber halt doch nötig, damit ich wait() bzw. notify() aufrufen kann)

Man könnte sich selbst sowas basteln und dann mit signal() und swait() anstatt notify() und wait() arbeiten, bietet aber Java selbst nicht schon ein ähnliches Konstrukt?

[JAVA=42]
class Signal {
private boolean set = false; // Eigentliche Signalvariable
public synchronized void signal() {
set = true;
notify(); // if a process is waiting deblock it
}
public synchronized void swait() {
if (set == false)
wait(); // wait for signal, leave the method
set = false;
}
}
[/code]

Gruß :)
 

Marco13

Top Contributor
Schon mal einen Blick auf das Concurrency Framework geworfen?
;)

Zu deine letzten Beispiel: In manchen Fällen funktioniert das, und ist vielleicht auch ganz praktisch ("oft" hat man ein privates monitor-Objekt, das genau den Zweck erfüllt, den dieses "Signal" hätte). Aber wenn es NUR das gäbe, wäre das unflexibler, und manche Sachen wären nicht möglich (konkretes Beispiel müßt' ich mir auch erst überlegen, aber dürfte nicht so schwer sein)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
B Einfache HSQLDB? (lock acquisition failure) Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
U synchronized / lock Java Basics - Anfänger-Themen 8
alderwaran thread "lock" bei zugriff auf objektliste Java Basics - Anfänger-Themen 5
A lock bei Threads richtig einsetzen Java Basics - Anfänger-Themen 3
I Threads Multithreading, Producer/Consumer, notify() Java Basics - Anfänger-Themen 6
O Threads - Synchronize(), join(), wait(), notify(), yield() Java Basics - Anfänger-Themen 6
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
M notify und wait Java Basics - Anfänger-Themen 1
M Threads notify/notifyAll Philosophen-Problem Java Basics - Anfänger-Themen 14
M Threads notify Java Basics - Anfänger-Themen 6
D Stack-Objekt - LIFO - wait(); notify(); Java Basics - Anfänger-Themen 0
D Probleme mit wait(), notify() Java Basics - Anfänger-Themen 0
M wait/notify bei Socket Java Basics - Anfänger-Themen 4
T Alle Threads .notify() Java Basics - Anfänger-Themen 13
Luk10 Monitor: wait() und notify() Java Basics - Anfänger-Themen 8
S Threads: wait() und notify() Java Basics - Anfänger-Themen 11
S Problem mit notify() Java Basics - Anfänger-Themen 4
S bin zu blöd für threads - wait, notify, synchronized Java Basics - Anfänger-Themen 11
B Problem: wait() -> notify() Java Basics - Anfänger-Themen 4
M Threads, wait() und notify() Java Basics - Anfänger-Themen 10
G Threads steuern mit wait und notify Java Basics - Anfänger-Themen 2
P wait und notify oder wie soll ich es lösen Java Basics - Anfänger-Themen 2
M Warum kann man dem Thread kein notify senden? Java Basics - Anfänger-Themen 15
B Synchronisation eines kleinen Museums Java Basics - Anfänger-Themen 47
M Umgang mit Thread/ Synchronisation/ Deadlock-Vermeidung Java Basics - Anfänger-Themen 5
P Thread Synchronisation Java Basics - Anfänger-Themen 9
T Thread Synchronisation Java Basics - Anfänger-Themen 3
Dit_ Thread Synchronisation | Übung Java Basics - Anfänger-Themen 5
A Ausgabe immer anders, synchronisation? Java Basics - Anfänger-Themen 2
hdi Synchronisation zwischen JList und ListModel Java Basics - Anfänger-Themen 6
hdi statische synchronisation Java Basics - Anfänger-Themen 6
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
H Synchronisation von Threads Java Basics - Anfänger-Themen 12
Kr0e Synchronisation Java Basics - Anfänger-Themen 7
G Synchronisation Java Basics - Anfänger-Themen 8
A Thread Synchronisation Java Basics - Anfänger-Themen 10
M thread synchronisation Java Basics - Anfänger-Themen 6
L Problem bei Synchronisation von Threads Java Basics - Anfänger-Themen 3
S Sockets und Synchronisation Java Basics - Anfänger-Themen 7
U Synchronisation, Thread Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben