synchronized block mit this und wait()

Status
Nicht offen für weitere Antworten.

javahoush

Mitglied
hallo,

ich habe verständnisprobleme mit folgendem codestück:


Java:
class X extends Thread{

  //...
  public void run(){
    while (true) {
			try {
				synchronized (this) {
					wait();
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
  }
}

1. Ist es korrekt zu sagen, dass der Thread hier auf sich selbst wartet? Das synchronized ist ja auf "this". "this" ist ja hier ein Thread-Objekt.

2. Wie würde man nun aus einer anderen Klasse heraus ein notify() für diesen Thread aufrufen?

herzlichen dank für die hilfe.
gruß,
harald
 
S

SlaterB

Gast
ein Thread-Objekt ist ein ganz normales Objekt, welches in einer Variablen gespeichert oder als Parameter übergeben werden kann,
nicht anders als ein String oder eine ArrayList,

die Frage des Aufrufs stellt sich also nicht schwieriger dar als bei jedem anderen Objekt

> Ist es korrekt zu sagen, dass der Thread hier auf sich selbst wartet?

der Thread wartet auf ein ihm zugeordeten natürlichen Verwaltungsobjekt, aber der laufende Thread IST NICHT zu 100% genau das Thread-Objekt,

auch wenn der Thread schon beendet ist, ist das Objekt noch etwas wert, kann Daten enthalten, für wait()/ notify() genutzt werden,
theoretisch könnte ein anderer Thread gestartet und in dessen run-Methode lediglich die run-Methode des ersten Threads aufgerufen werden,

aber die vorgegebenen Methoden wie interrupt(), start(), stop() usw. sind tatsächlich mit dem ursprünglich zugeordeneten Laufzeit-Thread verbunden
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
die Frage des Aufrufs stellt sich also nicht schwieriger dar als bei jedem anderen Objekt

wenn du irgendwo
new Thread(this).start();
stehen hast oder ähnliches
dann wirds natürlich schwer für jeden anderen, das Thread Objekt zu kennen,

wenn du aber

main {
Thread t = ..;
t.start()

objectX.hierKennstDuDenThread(t);
objectY.hierKennstDuDenThread(t);
objectZ.hierKennstDuDenThread(t);
}

hast, dann kennen offensichtlich sehr viele das Thread-Objekt,
notfalls als Anfänger den Thread in einer statischen Variable allgemein bekannt machen,
es geht ganz allein um die Verteilung des Objektes/ der Information,
wie in allen Aufgaben der Programmierung genauso
 

javahoush

Mitglied
Das bringt mich dann zu der generellen Frage:

In meinem Code-Bsp. wartet der Thread auf sich selbst. Wie notify'e ich aber einen Thread vom dem ich keine Referenzvariable (auf das Thread-Objekt) habe? z.B. von einer anderen Klasse?

Wie würde man an das Problem "professionellerweise" herangehen?

gruß,
harald
 

Geeeee

Bekanntes Mitglied
Was meinst du mit "einen Thread notifyen"?
Du machst das notify ja auf das synchronisierte Objekt (ok das ist in diesem Fall ein Thread). D.h. eine notify weckt einen Thread, der auf das Objekt wartet (bei mehreren wartenden ist das "quasi" random), wenn du notifyAll machst laufen (natürlich wieder unvorhersehbare Reihenfolge) alle Threads an.
Da wirst du, meiner Meinung nach, von außen ohne Referenz nichts einfach machen können. Das einzige was ich als Workaround (wohl eher als miese Lösung) sehe: Man könnte sich mit Thread.getAllStackTraces alle vorher mit Namen versehenden Threads holen, über die Map laufen und beim "richtigen" Threadnamen notify aufrufen (*grusel*)

Wenn du dich noch mehr damit auseinandersetzen willst, dann schau dir einfach auch mal die Concurrency Utils / API von Java an. Wurde ich damals mal drauf hingewiesen, selber aber irgendwie noch nichts wirklich gehabt, wo sie sich angeboten hat.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Ein synchronized Block ausreichend? Allgemeine Java-Themen 6
J Synchronized Probleme Allgemeine Java-Themen 7
D ReentrantLock oder Synchronized ? Allgemeine Java-Themen 3
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
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
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
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
Neumi5694 Lambda - Block vs "Anweisungsliste" Allgemeine Java-Themen 8
I Java Optionals mit return-Block Allgemeine Java-Themen 2
C try-catch Block Verständnisfrage Allgemeine Java-Themen 14
B Sudoku-Block-Prüfung Allgemeine Java-Themen 1
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
C Unendlich Wiederholungsfehler bei try catch - Block Allgemeine Java-Themen 3
T Warum ein privileg block? Allgemeine Java-Themen 0
H Probleme mit finally-Block und close() Allgemeine Java-Themen 4
N String aus Try/Catch-Block übernehen Allgemeine Java-Themen 14
B Execption auf Oberfläche werfen, try-catch-Block Allgemeine Java-Themen 6
G Initialization Block? Allgemeine Java-Themen 8
A Annotation einer Subklasse im static-Block auslesen. Allgemeine Java-Themen 6
E JNA:Zugriff auf Common-Block von Fortran bzw. Struct in C Allgemeine Java-Themen 2
D break block by label Allgemeine Java-Themen 14
M Konstruktor / statischer Block Allgemeine Java-Themen 13
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
G GC Warning: Repeated allocation of very large block Allgemeine Java-Themen 35
E try/catch Block um ganzes Programm Allgemeine Java-Themen 10
conan2 static-Block in Klassen Allgemeine Java-Themen 6
T rießiger try - catch - Block Allgemeine Java-Themen 13
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
K Multithreading: Service(Task), wait und continue Allgemeine Java-Themen 21
G Threads Threadprogrammierung wait() und notify() Allgemeine Java-Themen 4
J Thread wait() Allgemeine Java-Themen 2
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
T Wait/Notify() bei Thread Allgemeine Java-Themen 6
A System freezes when trying to run external command from Java with wait for Allgemeine Java-Themen 3
B Threads Barrier mit wait()/notify() aber nicht alle Prozesse terminieren Allgemeine Java-Themen 2
P Threads abwechseln lassen mit wait() und notify() Allgemeine Java-Themen 2
M Java Threads - Wait Notify - Verständnisproblem Allgemeine Java-Themen 5
K Threads wait() und notify() Allgemeine Java-Themen 8
Q Frage zu Threads ( notify() wait() ) Allgemeine Java-Themen 6
G Thread wait, notify Allgemeine Java-Themen 4
T Threadsicheres wait() [lock erst mit wait() abgeben] Allgemeine Java-Themen 31
G Process.wait() auf Folgeprozesse mitwarten Allgemeine Java-Themen 29
H wait() and notify() mit mehreren Prozessen Allgemeine Java-Themen 14
G Thread wait() auf Nicht-Thread Klasse Allgemeine Java-Themen 5
A thread1 stoppt thread2 mit wait() und notify() ? Allgemeine Java-Themen 3
M Thread mit wait anhalten, wie weiterlaufenlassen? Allgemeine Java-Themen 3
M wait in Thread einschieben? Allgemeine Java-Themen 4
C p.wait() bremst aus Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben