English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Es gibt zwei Methoden, um gemeinsame Ressourcen über mehrere Threads zu sperren. Eine ist der ReentrantLock (oder ReadWriteLock), die andere ist die Verwendung von Synchronized-Methode.
Java 5Die Klasse ReentrantLock wird im Java Concurrent-Paket bereitgestellt.
Es ist eine Implementierung des Lock-Interfaces. Laut java docs bieten die Implementierungen des Lock-Interfaces breitere Operationen als die Verwendung von Synchron-Methoden.
Nummer | Schlüssel | Wiedereinsetzbares Schloss | Synchronisiert |
---|---|---|---|
1 | Schlüssel erwerben | Die Klassen für wiedereinsetzbare Schlösser bietenlock() Methoden, um den Shared Resource Lock durch den Thread zu erhalten | Sie müssen nur den Schlüssel 'synced' schreiben, um den Schließvorgang zu erhalten |
2 | Freigabe des Schlosses | Um den Schließvorgang freizugeben, muss der Programmierer aufgerufen werdenunlock() Methode | Implizit abgeschlossen |
3 | Unterbrechungsfähigkeit | Das lockInterruptible() -Verfahren kann verwendet werden, um einen Thread zu unterbrechen | Es gibt keine Möglichkeit, einen Thread zu unterbrechen |
4 | Fair | Dieser Konstruktor hat einen fairen Parameter. Wenn er auf true gesetzt wird, wird der Schließvorgang denjenigen zugewiesen, der am längsten wartet *Zugriffsberechtigung der Threads | Die Schlüssel garantieren keine bestimmte Zugriffsberechtigung |
5 | Freigabereihenfolge der Schlüssel | Die Schlüssel können in beliebiger Reihenfolge freigegeben werden | Die Schlüssel sollten in der Reihenfolge ihres Erhalts freigegeben werden |
public class ReentrantLockExample implements Runnable{ private Lock lock = new ReentrantLock(); @Override public void run() { try { lock.lock() //Einige Ressourcen sperren } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } }
public class SynchronizedLockExample implements Runnable{ @Override public void run() { synchronized (Ressource) { //Einige Ressourcen sperren } } }