Multithreading (Prüfungsvorbereitung)

Status
Nicht offen für weitere Antworten.

Ishildur

Bekanntes Mitglied
Hallo zusammen
Ich habe nächste Woche eine Prüfung in Java Multithreading und habe hierzu ein Frage (und weitere werden vermutlich folgen :) )

Ich habe ein Verständnisproblem im Zusammenhang mit den Monitors und zwar kann ich folgendes nicht so recht verstehen: Wenn ich eine synchronisierte Collection benötige, so muss ich ja meine Zugriffsmethoden nicht synchronisieren, solange ich die Methoden einfach nur delegiere:
Code:
public void add(MyObject obj){
 this.syncList.add(obj); // syncList ist ein java.util.Vector
}
Aber in diesem Fall darf ich dies ja nicht mehr so machen:
Code:
public void add(MyObject obj){
 if(this.syncList.contains(obj)) this.syncList.add(obj); // zwischen dem contains und add könnte der Thread unterbrochen werden... PFUI!!
}
Nun habe ich es folgendermassen in den Büchern gelesen:
Code:
public void add(MyObject obj){
 synchronized(this.syncList){
   if(this.syncList.contains(obj)) this.syncList.add(obj); // alles paletti
 }
}
Aber das kann ich nun icht verstehen...

Wieso kann man es nicht einfach so machen:
Code:
public synchronized void add(MyObject obj){
  if(this.syncList.contains(obj)) this.syncList.add(obj); // ist offentbar ungültig, weil mehrere Monitore
}
Könnte mir das jemand erklären? Wäre echt nett!! :D

Mfg Ishildur

P.S.
By the way. Ich höre immer wieder, Vector sei schlecht! Wie macht man den eine synchronisierte Liste korrekt? Ich habe keine ConcurrentList gefunden?
 
G

Gast

Gast
> Wie macht man den eine synchronisierte Liste korrekt?

Collections#synchronizedList(List<T> list)
 

Murray

Top Contributor
Sollte es noch irgendwo außerhalb Deiner Wrapper-Klasse Referenzen auf den Vector geben, dann könnte man darüber ja ggfs. aus anderen Threads den Vector verändern. Das würde durch das Sychronisiren auf die Wrapper-Klasse nicht verhindert werden.
 

Ishildur

Bekanntes Mitglied
Hehe, stimmt! :) Kann mir noch jemand die Sache mit den Monitors erklären? Stehe da echt auf dem Schlauch!
 

Marco13

Top Contributor
Du meinst das letzte? Wenn ich nicht gerade einen (auf Hunger und Müdigkeit zu schiebenden :wink: ) Denkfehler habe, kann da ein Deadlock auftreten:
Code:
public synchronized void add(MyObject obj)
{
XXX  
  if(this.syncList.contains(obj)) 
  {
    this.syncList.add(obj); 
  }
}

public void doSomething add(MyObject obj)
{
  synchronized (syncList)
  {
YYY
    add(obj);
  }
}

Ein Thread könnte in der Zeile XXX stehen - er hält den Monitor "this", und wartet darauf, dass der Monitor "syncList" freigegeben wird, damit er "contains" aufrufen kann.

Ein anderer Thread steht in Zeile YYY - er hält den Monitor "syncList", und wartet darauf, dass der Monitor "this" freigegeben wird, damit der "add" aufrufen kann.

.... ???:L kann mich auch irren, aber ich denke, das würde zu einem Deadlock führen.
 

Ishildur

Bekanntes Mitglied
Hmm, bedeutet dies, dass jedes Objekt einen Monitor haben kann?

Also wäre folgender Code semantisch identisch?
Code:
public synchronized void doSomething(){
 // my code
}
und
Code:
public void doSomething(){
 synchronized(this){
  // my code
 }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
buzzlightyeah multithreading Java Basics - Anfänger-Themen 4
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
I Threads Multithreading, Producer/Consumer, notify() Java Basics - Anfänger-Themen 6
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
kilopack15 Verzweiflung wegen Berechnung mit Multithreading Java Basics - Anfänger-Themen 1
P Multithreading in Java Java Basics - Anfänger-Themen 9
N Threads Read-Modify-Write Problem bei Multithreading (philosopher dining problem) Java Basics - Anfänger-Themen 5
R Threads Multithreading Java Basics - Anfänger-Themen 15
Z Verständnisfrage zum Multithreading Java Basics - Anfänger-Themen 3
T Threads MultiThreading NullPointerException Java Basics - Anfänger-Themen 7
K Frage bzgl. Multithreading Java Basics - Anfänger-Themen 5
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
C Multithreading, Methoden sichern Java Basics - Anfänger-Themen 5
P Hilfe bei MultiThreading; Einige Fragen. Java Basics - Anfänger-Themen 14
S OOP Multithreading Java Basics - Anfänger-Themen 5
B Multithreading Java Basics - Anfänger-Themen 5
0din Multithreading und stop Java Basics - Anfänger-Themen 5
P Singletons und Multithreading Java Basics - Anfänger-Themen 11
U Anfängerfrage - Multithreading Java Basics - Anfänger-Themen 8
H Multithreading Java Basics - Anfänger-Themen 7
M Multithreading Java Basics - Anfänger-Themen 18
G UI friert bei Multithreading ein Java Basics - Anfänger-Themen 3
J Multithreading mit einer TextArea Java Basics - Anfänger-Themen 29
JFeel-x Multithreading in awt Java Basics - Anfänger-Themen 2
L NullpointerException wegen wahrscheinlichem Multithreading Java Basics - Anfänger-Themen 4
Z Multithreading Java Basics - Anfänger-Themen 2
P Multithreading Java Basics - Anfänger-Themen 22
S Prüfungsvorbereitung Januar ( Thema Ausdrücke ) Java Basics - Anfänger-Themen 14
M Generic Prüfungsvorbereitung Java Basics - Anfänger-Themen 4
F Prüfungsvorbereitung Arrays Java Basics - Anfänger-Themen 32

Ähnliche Java Themen

Neue Themen


Oben