Thread Problem.

Status
Nicht offen für weitere Antworten.
N

Neptune

Gast
Hallo ich habe da ein Problem mit einer ehemaligen Klausuraufgabe.

Es heisst dort
a) Ist die Synchronisation ausreichend, um Schreib/Schreib- und Schreib/Lese-
Konflikte auszuschließen? Falls nein, warum nicht?

Ich würde jetzt nach meiner Erfahrung sagen, das die Synchronisation ausreicht, aber das wäre doch etwas zu einfach denke ich.

Vielleicht kann mir ja jemand bei dem Problem helfen.

Code:
public class Test{
 private String[] s1 = {"foo"};
 private String[] s2 = {"bar"};
 
public void copy_s1_to_s2() {
 synchronized(s1) {
    synchronized(s2) {
       s2[0]=s1[0];
    } 
  } 

}

public void copy_s2_to_s1() {
  synchronized(s2) {
    synchronized(s1) {
      s1[0]=s2[0];
    } 
  } 
}

public static void main(String args[]) {
  final Test t = new Test();
  
new Thread() {
  public void run(){
  t.copy_s1_to_s2();
  }
}.start();

new Thread() {
  public void run(){
  t.copy_s2_to_s1();
  }
}.start();

} 
}
 
S

SlaterB

Gast
hier scheint ja recht offensichtlich das klassische Deadlock-Problem
'Thread1 synchronisiert auf s1, Thread2 synchronisiert auch s2, beide warten endlos auf den anderen'
gemeint zu sein,

wie kann man das nun vermeiden?
 
G

Guest

Gast
also Deadlock is nicht gemeint denke ich, das wäre die nächste Frage

Warum kann es bei der Ausführung des Programms dazu kommen, dass es
nicht mehr weiterläuft, weil sich die Threads verklemmt haben? Was müsste
man im Programm in den beiden copy-Methoden wie abändern, um dieses
Deadlock-Problem zu vermeiden?

Aber die Antwort hab ich schon.

Es müssen die Sychronized Blöcke nur immer in der gleichen Reihenfolge vorkommen, damit wäre das problem gelöst
(also zB zeile15 und 16 vertauschen)
 
S

SlaterB

Gast
tja, ansonsten musst du mal genauer definieren was ein solcher Konflikt sein könnte,

die Operationen dauern doch nur 10 ms,
wenn da zwei gleichzeitig ankommen, dann muss einer warten, so ist das nun mal,
aber was soll man da als Konflikt bezeichnen?

man könnte weiterhin noch getter einfügen, die auch dann lesen, wenn das Objekt per synchronized gesperrt ist,

aber da es bisher überhaupt keine getter gibt.., das schließt ja jeden Lese-Konflikt von Natur aus aus..,
schwierig ins Leere zu interpretieren, naja deswegen fragst du ja hier ;)
vielleicht weiß wer sonst mehr
 

SamHotte

Top Contributor
Ich tät sagen, ihr denkt zu viel. Die Antwort auf Frage a ist: nein, die Synchronisation ist nicht ausreichend (Begründung wie bei SlaterB).
In Frage b darfst du das Problem dann lösen.

Stehen da Punktzahlen dran an der Klausur?
 
G

Guest

Gast
Ja da steht 15 Punkte (von 100) für die beiden Fragen zusammen.
Aber die Synchronisation ist doch in Bezug auf die Schreib/Schreib- und Schreib/Lese-Zugriffe gemeint.
Deadlocks sind ja das andere Problem,

aber vlt. habt ihr ja recht... naja die aufgabe ist zumindest nicht ganz eindeutig
 

SamHotte

Top Contributor
Schade, normal kann man ganz gut an der Punktzahl ablesen, wie kompliziert die Frage ist (zumindest ging das bei uns damals so) ...

Das mit den Zugriffen scheint mir die übliche Verwirr-Taktik zu sein. Das einzige Problem, das ich dort sehe, ist in der Tat der mögliche Deadlock.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
B Thread Problem Java Basics - Anfänger-Themen 7
G problem mit thread.sleep() Java Basics - Anfänger-Themen 6
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
M Threads Thread.Sleep Problem im Zusammenhang mit GUI/ActionPerformed-Methode Java Basics - Anfänger-Themen 4
H Threads Problem bei Thread + Innere Klasse Java Basics - Anfänger-Themen 3
F thread problem Java Basics - Anfänger-Themen 3
D Problem mit interrupt() thread Java Basics - Anfänger-Themen 4
G Problem Thread und Monitoring Java Basics - Anfänger-Themen 3
P Problem beim Thread Java Basics - Anfänger-Themen 20
kulturfenster Problem mit Thread + Interface Java Basics - Anfänger-Themen 4
S problem mit repaint() in Thread Java Basics - Anfänger-Themen 6
M Thread - Problem Java Basics - Anfänger-Themen 3
A Problem zweitem Thread in Applet Java Basics - Anfänger-Themen 12
G Problem mit Thread Sleep! Java Basics - Anfänger-Themen 3
G Problem mit Thread Java Basics - Anfänger-Themen 6
G Thread-Problem, glaube ich? Java Basics - Anfänger-Themen 5
G Thread Problem Java Basics - Anfänger-Themen 13
A Do/While Problem (Exception in thread "main" java. Java Basics - Anfänger-Themen 4
G Thread Problem Java Basics - Anfänger-Themen 2
P Problem mit Thread - cannot be referenced from a static cont Java Basics - Anfänger-Themen 5
H Problem mit einem Programmversuch (geteilter Thread) Java Basics - Anfänger-Themen 3
E Anfänger Problem mit Thread.sleep() Java Basics - Anfänger-Themen 11
D Thread und JOptionPane -> Problem Java Basics - Anfänger-Themen 6
D Thread Problem Java Basics - Anfänger-Themen 4
K Problem beim Einbau von einem Thread in eine Gui Java Basics - Anfänger-Themen 9
K animation in applet, thread problem (?) Java Basics - Anfänger-Themen 3
G Problem bei Thread im Frame Java Basics - Anfänger-Themen 3
G Problem mit Thread Java Basics - Anfänger-Themen 2
G Thread-Problem Java Basics - Anfänger-Themen 2
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread find number Java Basics - Anfänger-Themen 8
F Thread.sleep() Java Basics - Anfänger-Themen 5
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
N KeyListener in Thread Java Basics - Anfänger-Themen 0
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben