Ich muss die Funktion myFunc()
von der Ausführung von mehreren Threads isolieren. Ich kann diese Aufgabe mit Mutex
lösen. Seit Java 1.4
nicht unterstützt Mutex
wie auf andere Weise diese Aufgabe zu lösen?Mutex in Java 1.4
Antwort
In Java haben alle Objekte eine intrinsische Sperre, auch als Monitorsperre bezeichnet. Dies reicht aus, um einen einfachen gegenseitigen Ausschluss zu ermöglichen, hat jedoch Einschränkungen.
public final class MyClass1 {
public synchronized void myFunc() {
// Exclusive work here
}
}
synchronized
Das Schlüsselwort für das Verfahren bedeutet, dass die intrinsische Verriegelung der MyClass1 Objektinstanz erfaßt werden muss, bevor myFunc laufen kann.
public static final class MyClass2 {
private final Object mutex = new Object();
public void myFunc() {
synchronized (mutex) {
// Exclusive work here
}
// There is no mutual exclusion here
}
}
Ein Block innerhalb einer Methode kann für den Bereich des Blocks synchronisiert werden. Dies ermöglicht Ihnen auch, das Objekt auszuwählen, um die Sperre zu erhalten.
Eine intrinsische Sperre wird entweder irgendwann erreicht oder der Thread hängt. Ein Versuch, eine intrinsische Sperre zu erhalten, ist nicht Timeout und kann nicht unterbrochen werden.
Eine intrinsische Sperre ist reentrant, sodass Sie sich keine Sorgen darüber machen müssen, dass ein Thread mit sich selbst blockiert. Deadlocks können immer noch auftreten, wenn Sperren in verschiedenen Aufträgen erfasst werden.
Das synchronisierte Schlüsselwort gewährleistet auch die Sichtbarkeit von Lese- und Schreibvorgängen, wenn beide in einem synchronisierten Code stattfinden, der dasselbe Objekt sperrt.
https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html https://docs.oracle.com/javase/tutorial/essential/concurrency/memconsist.html
Sie sollen auch wissen, dass das Java-Speichermodell seit 1.4 so viel von den aktuellen Informationen ist nicht anwendbar geändert hat.
ziehe ich die letzte Objektsperre über die Synchronisierungsmethode. Synchronisierungsmethoden, die die Instanz sperren, können bei mehr als einer synchronisierten Methode zu Problemen führen. –
- 1. Wie in Java 1.4
- 2. Jar Dateiabhängigkeiten in Java 1.4
- 3. java 1.5 bis 1.4
- 4. Erstellen benannter Mutex-Semaphore in Java
- 5. Berechnung Zeichenfolge Breite Java 1.4
- 6. Zugriff auf Windows-Systemvariablen in Java 1.4
- 7. Öffentlicher finaler Mutex für Java-Thread-Sicherheit
- 8. Force Eclipse nur Java 1.4 verwenden
- 9. Garbage Collection-Änderung von Java 1.4 zu Java 6?
- 10. Backport Java 5/6 Funktionen auf Java 1.4?
- 11. Mutex analog in SQL?
- 12. Mutex in Python Twisted
- 13. Um Mutex oder nicht zu Mutex?
- 14. Validierung In Symfony 1.4
- 15. Einwegbindung in angularjs 1.4
- 16. Erhalte die eindeutige ID eines Threads in Java 1.4
- 17. Benutzt Mutex
- 18. -Monitor vs Mutex in C#
- 19. ngRepeat Animation in eckig 1.4
- 20. Newsletter-Modul in Symfony 1.4
- 21. Dynamische Seitentitel in Symfony 1.4
- 22. Statische Ordnerstruktur in Django 1.4?
- 23. Manipulieren Datum mit symfony 1.4
- 24. Wie man spielt! Framework 1.4.x Java-Anmerkungen vorverarbeiten?
- 25. Thread-Code ... etwas falsch mit diesem, muss Java 1.4
- 26. Eclipse-> Neue Android Projekte kompilieren immer Java 1.4
- 27. Nicht Threadlocked Mutex
- 28. C++ Privat Mutex Zugang
- 29. Mutex für Rails-Prozesse
- 30. Compiler Umordnung Mutex Grenzen?
Put maximale Anstrengung Java-Version zu aktualisieren ... – mks