Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus?

berserkerdq2

Bekanntes Mitglied
Hi, ist es bei Lock and Conditions auch so, dass eine parallele Verarbeitung stattfindet, wie bei Threads? Und ist es bei Threads erst so, dass iene parallele Verarbeitugn stattfindet, wenn man synchronized nutzt?
 
Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized?

Also, ob und was wirklich parallel ablaeuft in Threads ist ein Implementierungsdetail des Betriebssystems. Das Betriebssystem entscheidet was wann ausgefuehrt werden soll.

synchronized ist effektiv ein Lock auf den Kontext der Klasse (also entweder Instanz oder Statischen Kontext). Das bedeutet dass eine Methode oder ein Block welcher synchronized ist, ist garantiert dass dieser nicht gleichzeitig von unterschiedlichen Threads betreten wird. Wird eine synchronized Methode oder Block gerade ausgefuehrt und ein anderer Thread will diese ausfuehren, haelt dieser an bis der erste Thread die Methode verlassen hat.

Hi, ist es bei Lock and Conditions auch so, dass eine parallele Verarbeitung stattfindet, wie bei Threads? Und ist es bei Threads erst so, dass iene parallele Verarbeitugn stattfindet, wenn man synchronized nutzt?

Locks sind Locks, die haben nichts damit zutun wie der Code ausgefuehrt wird, die sorgen eben nur dafuer dass ein zweiter Thread diesen Teil nicht parallel ausfuehrt. "Conditions" ist ein Wort, ja, hat alleinstehend aber so richtig gar nichts damit zu tun.
 
Also, ob und was wirklich parallel ablaeuft in Threads ist ein Implementierungsdetail des Betriebssystems. Das Betriebssystem entscheidet was wann ausgefuehrt werden soll.

synchronized ist effektiv ein Lock auf den Kontext der Klasse (also entweder Instanz oder Statischen Kontext). Das bedeutet dass eine Methode oder ein Block welcher synchronized ist, ist garantiert dass dieser nicht gleichzeitig von unterschiedlichen Threads betreten wird. Wird eine synchronized Methode oder Block gerade ausgefuehrt und ein anderer Thread will diese ausfuehren, haelt dieser an bis der erste Thread die Methode verlassen hat.



Locks sind Locks, die haben nichts damit zutun wie der Code ausgefuehrt wird, die sorgen eben nur dafuer dass ein zweiter Thread diesen Teil nicht parallel ausfuehrt. "Conditions" ist ein Wort, ja, hat alleinstehend aber so richtig gar nichts damit zu tun.
Hi danke, die Sache ist wir haben eine Aufgabe, wo wir Methoden nicht synchronized haben und dann wird gefragt, findet eine parallele Verarbeitung statt und danach haben wir synchronized Mehtoden, die das Ergebnis leifern, was wir auch wollten. Und da wird dann ebenfalls gefragt, ob eine parallele Verarbeitung stattfindet?
 
Hier hast du mal die offizielle Dokumentation zu dem Thema.

Um das nochmal anders auszudruecken: synchronized entspricht einem Lock, sagt aber nichts ueber Threads oder nicht aus.
Ja das habe ich gelesen, deshalb kapiere ich dei Fragestellung nicht, wenn wir das nicht synchronized haben, haben wir nicht das gewünschte Ergebnis,w as wir haben sollten, bei synchronized haben wir es.

Nun ist halt die Frage ob es ohne synchronized parallel läuft und ob es mit synchronized parallel läuft
 
Zuletzt bearbeitet:
Wie Robert schon sagte, gibt es keine Aussage darüber, ob zwei Threads wirklich parallel ausgeführt werden.
Es gibt aber sehr wohl eine Garantie darüber, dass zwei Threads garantiert nicht parallel/zeitgleich ausgeführt werden, wenn sie sich auf denselben Monitor synchronisieren (per synchronized etwa auf derselben Instanz oder Klasse).
wenn wir das nicht synchronized haben, haben wir nicht das gewünschte Ergebnis,w as wir haben sollten, bei synchronized haben wir es.
Niemand weiß hier, was bei dir das gewünschte und tatsächliche Ergebnis jeweils ist.
 
Um mal auf die Eingangsfragen zurückzukommen:

ist es bei Lock and Conditions auch so, dass eine parallele Verarbeitung stattfindet, wie bei Threads?
synchronized/Locks/Conditions sind weder notwendig noch geeignet, um eine parallele Verarbeitung auszulösen. Dagegen werden sie genutzt, um die gleichzeitige Nutzung einer Ressource im Rahmen einer nebenläufigen Programmierung zu reglementieren.

Und ist es bei Threads erst so, dass iene parallele Verarbeitugn stattfindet, wenn man synchronized nutzt?
Die Frage kann man, wie Du aus den gegebenen Antworten herauslesen kannst, durchaus beantworten: nein.

EDIT: Tippfehler...
 

Zurück
Oben