synchronized / lock

unknown

Bekanntes Mitglied
hallo

Wenn ich zwei Methoden innerhalb einer Klasse synchronisieren möchte, ist es ja kein problem. einfach den Begriff "synchronized" anwenden und dann funktionierts.
Doch wie kann ich zwei oder mehrere Methoden, welche sich in unterschiedlichen Klassen befinden, synchronisieren?

Ich dachte, es ist mit "Lock" und "unlock" möglich?
Jedoch alle Beispiele mit Lock, die ich im Google finde, sind für eine einzige Klasse gedacht. Was mich zu meiner zweiten Frage führt: was ist denn überhaupt der Unterschied zwischen synchronized und Lock?
 

Vancold

Aktives Mitglied
Hey!

Was ich weiß einfach das Schlüsselwort synchronized benutzen. es ist egal wo die Klasse.
Synchronized sagt den Threads nur wer zuerst kommt kommt zuerst. Alle anderen warten.
Das funktioniert unabhängig von Klassen ;).

Und ja Lock ist gut wenn du nur 2 Codezeilen synchronisieren willst. Manchmal ist es halt bisschen aufwendig alle Methoden zu synchronisieren wenn nur 2 Codezeilen nicht Threadsicher sind ;)


lg

Rene
 

unknown

Bekanntes Mitglied
Hey!

Was ich weiß einfach das Schlüsselwort synchronized benutzen. es ist egal wo die Klasse.

Hey :)
Ich habe es probiert und es scheint nicht der Fall zu sein. Offenbar funktioniert synchronized nur innerhalb einer Klasse.

Ich nehme an, dass es mit Lock machbar wäre. Finde allerdings kein Beispiel im Google, wie man das machen könnte.

Ein kleines Beispiel würde mir reichen.
 

Vancold

Aktives Mitglied
Allein diese Aussage ist schon absoluter Quatsch.
Du kannst nicht zwei Methoden miteinander synchronisieren.
Du kannst nur den konkurrierenden Zugriff (i.d.R durch mehrere Threads) auf ein und dieselbe Ressource synchronisieren.

Gruß
JP

ich glaub die Aussage war einfach nicht gleichzeitig sondern einfach allgemein. wenn man 2 Methoden in der Klasse hat das man Sie synchonisieren kann.

;)


lg

Rene
 

Vancold

Aktives Mitglied
Oh. und ja ich glaub cih weiß was du meinst ja hast recht JavaProfi ;)

und du kannst 2 Methoden nie gleichzeitig starten.
Das geht net. Du könntest maximal 1 methode aufrufen und sofort die zweite. ansonsten gehts net.
Oder was meinst du?
 
V

vanny

Gast
Die "Klasse" spielt hier keine Rolle, sondern die Daten(das Objekt), das verändert werden soll.
Und noch genauer geht es bei syncronized und bei lock um die Regelung des zugriffs auf dieses Object.

Dir wird sicher schon aufgefallen sein, das du nicht einfach so syncro hinschreiben kannst, sondern auch ein Object angeben solltest über welches dann halt syncronoisiert wird.:oops:

Gruß Vanny
 

ARadauer

Top Contributor
und du kannst 2 Methoden nie gleichzeitig starten.
klar...


Java:
import java.util.Random;

public class Test implements Runnable {

    static Object semaphore = new Object();

    static Random rnd = new Random();

    public static void main(String[] args) {

        new Thread(new Test()).start();
        new Thread(new Test()).start();

    }

    public void test1() throws InterruptedException {
        // synchronized (semaphore) {
        System.out.print("test1 -> ");
        Thread.sleep(rnd.nextInt(100));
        System.out.println("<- test1");
        // }
    }

    public void test2() throws InterruptedException {
        // synchronized (semaphore) {
        System.out.print("test2 -> ");
        Thread.sleep(rnd.nextInt(100));
        System.out.println("<- test2");
        // }
    }

    @Override
    public void run() {
        while (true) {
            try {
                test1();
                test2();
                Thread.sleep(rnd.nextInt(250));
            }
            catch (InterruptedException e) {
            }
        }
    }
}

Wobei ich anmerken muss das ich kein Multitreading Profi bin. Das könnte komplett gefährlich und falsch sein was ich da mit der semaphore mache... ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
A Thread - Synchronized Java Basics - Anfänger-Themen 10
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
O synchronized Java Basics - Anfänger-Themen 39
O synchronized difference Java Basics - Anfänger-Themen 5
E Synchronisierte Methoden vs. Synchronized(lockObject) Block Java Basics - Anfänger-Themen 7
T Was bringt das synchronized bei der Methode? Java Basics - Anfänger-Themen 12
temi Synchronized(Monitor) Java Basics - Anfänger-Themen 2
Shams Synchronized-Schlüsselwort bei Inkrementierung einer statischen Variable Java Basics - Anfänger-Themen 13
V Parameter in synchronized-Blöcken verstehen Java Basics - Anfänger-Themen 2
M Threads synchronized und wait Java Basics - Anfänger-Themen 2
N Threads Probleme mit synchronized Java Basics - Anfänger-Themen 9
B synchronized threads Java Basics - Anfänger-Themen 17
J Threads Synchronized Java Basics - Anfänger-Themen 6
P Arraylist synchronized? Java Basics - Anfänger-Themen 6
X3TitanCore Methoden synchronized bei einer Methode Java Basics - Anfänger-Themen 2
P synchronized methoden Java Basics - Anfänger-Themen 3
B warum schließt synchronized andere threads nicht aus? Java Basics - Anfänger-Themen 7
M Synchronized klappt nicht Java Basics - Anfänger-Themen 11
E synchronized Methoden Java Basics - Anfänger-Themen 3
M synchronized( ref ) Java Basics - Anfänger-Themen 3
I Synchronized Threads Java Basics - Anfänger-Themen 4
R Problem: Threads Synchronized machen Java Basics - Anfänger-Themen 5
M OOP Synchronized Methoden, zugriff aus Threads Java Basics - Anfänger-Themen 4
X Threads und synchronized - Verständnisproblem Java Basics - Anfänger-Themen 3
M Kleines Problem mit Threads (synchronized) Java Basics - Anfänger-Themen 3
S Fragen zu synchronized + Singleton! Java Basics - Anfänger-Themen 10
S bin zu blöd für threads - wait, notify, synchronized Java Basics - Anfänger-Themen 11
J simple Frage zu synchronized Java Basics - Anfänger-Themen 4
S Threads: synchronized mach nicht was es soll? Java Basics - Anfänger-Themen 6
L Threads und synchronized Java Basics - Anfänger-Themen 8
R wait() in synchronized - Block oder nicht? Java Basics - Anfänger-Themen 4
X Synchronized Zugriff ArrayList<E> Java Basics - Anfänger-Themen 6
G synchronized Java Basics - Anfänger-Themen 5
M synchronized variables? Java Basics - Anfänger-Themen 8
B Verständnissfrage synchronized Java Basics - Anfänger-Themen 2
S Warum wirkt hier synchronized nicht? Java Basics - Anfänger-Themen 9
C Trotz "synchronized" unerwartete Ausgabe Java Basics - Anfänger-Themen 2
E Synchronized - Methoden in verschied. Klassen Java Basics - Anfänger-Themen 3
C synchronized Java Basics - Anfänger-Themen 2
J Fragen zu Synchronized Java Basics - Anfänger-Themen 6
T synchronized HashMap Java Basics - Anfänger-Themen 7
L Problem mit synchronized und String Java Basics - Anfänger-Themen 2
A Problem mit Threads und synchronized Java Basics - Anfänger-Themen 3
B Was bedeutet synchronized? Java Basics - Anfänger-Themen 8
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
B Einfache HSQLDB? (lock acquisition failure) Java Basics - Anfänger-Themen 2
alderwaran thread "lock" bei zugriff auf objektliste Java Basics - Anfänger-Themen 5
M lock notify synchronisation Java Basics - Anfänger-Themen 8
A lock bei Threads richtig einsetzen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben