synchronized-Sclüsselwort: welche Reihenfolge zum Betreten?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo!

Nach welcher Reihenfolge dürfen Threads einen synchronized-Block betreten?

Also etwa:

Code:
// hier warten 5 Threads
synchronized(this){
// code
}
Geht das nach FIFO, oder ist es unspezifiziert? Oder sonstwas?
Hab' schon die gängige Literatur abgeklapptert, in der Java Language Specification hab' ich dazu auch nichts gefunden.

Weiß das jemand von euch vielleicht? Wenn ja, bitte Quelle mit angeben.


Danke & Gruß!
 

Illuvatar

Top Contributor
Ich weiß nicht ob das überhaupt festgelegt ist, wenn es selbst in der JLS nicht steht (ich hab nicht selbst nochmal nachgeschaut) spricht das dagegen. Folgender Test spricht aber eher für LIFO:

Code:
public class SyncTest extends Thread
{
  private int num;
  public SyncTest (int num) {
    this.num = num;
  }
  
  public void run() {
    System.out.println("Thread " + num + ": entering run");
    synchronized (getClass()) {
      System.out.println("Thread " + num + ": entering sync");
      sleep (3000);
      System.out.println("Thread " + num + ": leaving sync");
    }
  }

  public static void main(String[] args) {
    for (int i = 1; i <= 5; i++) {
      new SyncTest(i).start();
      sleep (500);
    }
  }
  
  public static void sleep (long ms) {
    try {
      Thread.sleep(ms);
    } catch (InterruptedException e) {
      Thread.currentThread().interrupt();
      e.printStackTrace();
    }
  }
}

Thread 1: entering run
Thread 1: entering sync
Thread 2: entering run
Thread 3: entering run
Thread 4: entering run
Thread 5: entering run
Thread 1: leaving sync
Thread 5: entering sync
Thread 5: leaving sync
Thread 4: entering sync
Thread 4: leaving sync
Thread 3: entering sync
Thread 3: leaving sync
Thread 2: entering sync
Thread 2: leaving sync

Da wüd ich mich aber auch nicht drauf verlassen - schau dir lieber mal java.util.concurrent an, mit den Klassen da hast du eine größere Kontrolle.
 
G

Guest

Gast
Hallo!

Kann auch sein, dass ich es in der JLS überlesen habe.

Geht mir eigentlich nur darum, um die ungefähren Laufzeiten abzuschätzen.

Das ReentrantReadWriteLock bietet ja bspw. auch nur "approximately" FIFO wenn man's als Fair erstellt.

Danke trotzdem, und falls noch jemand was weiß: immer raus mit der Sprache! :wink:

Gruß
 

André Uhres

Top Contributor
Anonymous hat gesagt.:
Nach welcher Reihenfolge dürfen Threads einen synchronized-Block betreten?
public final void notify()
Wakes up a single thread that is waiting on this object's monitor.
If any threads are waiting on this object, one of them is chosen to be awakened.
The choice is arbitrary and occurs at the discretion of the implementation.
A thread waits on an object's monitor by calling one of the wait methods.
 

FArt

Top Contributor
Annahme: es verhält sich wie bei notify() und wait()... die Reihenfolge ist nicht festgelegt.
 

diggaa1984

Top Contributor
so wie ich das bisher alles mitbekommen hatte bei meinen Übungen für die Uni, musst du einfach davon ausgehen das ein Thread an fast jeder Stelle unterbrochen werden kann, das kann direkt vor synchronized passieren oder sonst wo. Und welcher Thread dann dran ist und wie weit der kommt etc. das würde ich denken ist entweder JVM oder Betriebssystemabhängig, je nachdem wovon Java Thread-Scheduling und sone Späße abhängig macht.

Also meiner Meinung nach, wäre das quasi nicht vorhersagbar, welcher Thread wann da rein geht.
 

didjitalist

Bekanntes Mitglied
Das ist nicht nur deiner Meinung nach so ;) Mit den einfachen Bordmitteln "synchronized" und "transient" kann man sicherstellen, dass Zugriff auf Resourcen atomar abläuft. Aber wenn man Kontrolle über die Abarbeitungsreihenfolge von Threads haben will, muss man wesentlich mehr Aufwand investieren. Java bietet dazu genug Mittel an - das package java.util.concurrent ist da sehr praktisch - aber man muss sich trotzdem selbst darum kümmern.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
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
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
P Feststellen, Welche Classes ich aus einem JAR nutze? Allgemeine Java-Themen 6
H Apache fop -- welche Möglichkeit gibt es um den Fortschritt anzuzeigen (Progressbar) Allgemeine Java-Themen 5
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
F Java Web App - welche Technologien? Allgemeine Java-Themen 11
S Welche API? Allgemeine Java-Themen 6
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
K Welche Zertifizierung passt? Allgemeine Java-Themen 10
A Variable, welche Exeption wirft als "Global" deklarieren Allgemeine Java-Themen 13
J Videokonferenz mittel Java ? Welche Möglichkeiten habe ich ? Allgemeine Java-Themen 2
J Welche Layouts benutzt ihr? Allgemeine Java-Themen 2
G Wiedereinstieg, welche Java Version empfehlt ihr Allgemeine Java-Themen 7
M Welche Exceptionbehandlung ist sinnvoll? Allgemeine Java-Themen 3
H NetBeans geotools 15 oder 16 - welche Abhängingkeiten gibt es? Welche Jars brauche ich? Allgemeine Java-Themen 4
S Welche Java Techologien gibt es fürs Frontend Allgemeine Java-Themen 4
S Welche Nutzen bringen Lamda Expressions? Allgemeine Java-Themen 1
M Welche Umgebung und Frameworks für mich als Umsteiger Allgemeine Java-Themen 6
C Welche Styleconvention Allgemeine Java-Themen 0
ruutaiokwu datenstruktur welche sich "im kreis" dreht Allgemeine Java-Themen 26
R LinkedList und Threads - welche Methode ist besser? Allgemeine Java-Themen 2
F Welche Systeme für hoch skalierbare Webanwendung? Allgemeine Java-Themen 7
Landei Welche Klassen fehlen im JDK? Allgemeine Java-Themen 18
P Check, welche Java Version installiert bevor ein Programm ausgeführt wird. Allgemeine Java-Themen 12
G Welche Datenstruktur? Allgemeine Java-Themen 19
I Webseite auslesen (welche mittels Javascript Inhalt einbindet) Allgemeine Java-Themen 4
R Welche waren eure ersten Projekte? Allgemeine Java-Themen 10
G Wie kann man sehen, welche Applikationen mit java arbeiten? Allgemeine Java-Themen 17
L Social Media Webportal -> Welche Technologie (JEE, GWT) Allgemeine Java-Themen 8
J Welche Informationen werden beim Kompilieren gespeichert? Allgemeine Java-Themen 3
S Welche Datenstruktur für verschiedene Sprachen sinnvoll? Allgemeine Java-Themen 2
I Swing Welche Swing Komponente soll ich nehmen? Allgemeine Java-Themen 2
vladimir Welche API für Grafik und Drag&Drop Allgemeine Java-Themen 3
schlingel Plugin-Architektur - Welche nehmen? Allgemeine Java-Themen 6
U Welche 2D-API? Allgemeine Java-Themen 4
S Vererbung: Welche Methode wird verwendet? Allgemeine Java-Themen 9
M Welche Dateiformate kann Java einlesen?? Allgemeine Java-Themen 26
E Neues Projekt - Welche GUI / IDE /Techniken / etc. Allgemeine Java-Themen 14
E Welche Icons für sichtbar /unsichtbar Allgemeine Java-Themen 2
J Welche Lösung für Servlets und JSPs in Eclipse? Allgemeine Java-Themen 5
N Für welche Art von Berechnungen macht JCUDA Sinn? Allgemeine Java-Themen 12
A Welche Exception verwenden? Allgemeine Java-Themen 2
T Welche Art von Hilfe?? Allgemeine Java-Themen 5
N welche run.bat? Allgemeine Java-Themen 3
R Assoziativer Speicher welche Unterschiede? Allgemeine Java-Themen 5
Developer_X Welche Dateien kann Java laden? Allgemeine Java-Themen 9
G Welche Schreibeweise ist richtig Allgemeine Java-Themen 16
ARadauer welche java version wird benutzt Allgemeine Java-Themen 4
E Welche Java-Version kennt isEmpty() ? Allgemeine Java-Themen 2
F Welche dicken Java-Bücher kennt ihr? Allgemeine Java-Themen 31
M Prüfen, welche anderen Programme laufen Allgemeine Java-Themen 5
K [erledigt] JVM welche läuft Allgemeine Java-Themen 9
E welche standalone Version von Tomcat benutzen? Allgemeine Java-Themen 6
S Welche Speicherung von Daten bei Kalendarfunktion der jtable Allgemeine Java-Themen 7
F welche Datenstruktur? Allgemeine Java-Themen 9
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
P welche jar enthält was? Allgemeine Java-Themen 5
F Welche Datenstruktur Allgemeine Java-Themen 2
V Welche Oberfläche empfehlt ihr mir? Allgemeine Java-Themen 19
Z Welche Datenstruktur verwende ich h_ier bloss ? Allgemeine Java-Themen 14
S Welche jar's werden wirklich benötigt?` Allgemeine Java-Themen 5
G Dateien löschen welche vor heute erstellt wurden? Allgemeine Java-Themen 7
G Prüfen welche JRE-Version gebraucht wird Allgemeine Java-Themen 19
I Welche Möglichkeiten bietet Java um Records in Dateien zu sp Allgemeine Java-Themen 10
B Drucken - welche Bibliothek favorisiert Ihr? Allgemeine Java-Themen 16
J Welche Daten für Ative-X Funktion? Allgemeine Java-Themen 5
P welche java version für javax.mail? Allgemeine Java-Themen 7
B Erkennen welche Objekte den Heap verbrauchen? Allgemeine Java-Themen 2
B Welche Java-Version? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben