Middle
Ποιο είναι το νόημα της χρήσης του ReadWriteLock;
sobes.tech AI
Απάντηση από AI
ReadWriteLock επιτρέπει σε πολλαπλά νήματα να διαβάζουν ταυτόχρονα έναν κοινόχρηστο πόρο, αλλά μόνο σε ένα νήμα επιτρέπεται να γράφει ταυτόχρονα. Αυτό βελτιώνει την απόδοση σε σενάρια όπου η ανάγνωση είναι πιο συχνή από την εγγραφή.
Βασικά συστατικά:
- Read Lock: Μπορεί να διατηρείται από πολλά νήματα ταυτόχρονα.
- Write Lock: Μπορεί να διατηρείται μόνο από ένα νήμα. Κλειδώνει τόσο άλλους συγγραφείς όσο και αναγνώστες.
Αντίστοιχη συμπεριφορά χωρίς ReadWriteLock θα απαιτούσε τη χρήση synchronized ή ReentrantLock, που θα μπλόκαρε όλες τις λειτουργίες (ανάγνωση και εγγραφή) κατά τη διάρκεια που ένα νήμα διατηρεί το κλείδωμα.
Παράδειγμα χρήσης:
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
class SharedResource {
private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
private String data = "Initial Data";
public String readData() {
rwLock.readLock().lock(); // Απόκτηση κλειδώματος ανάγνωσης
try {
// Ανάγνωση δεδομένων
return data;
} finally {
rwLock.readLock().unlock(); // Απελευθέρωση κλειδώματος ανάγνωσης
}
}
public void writeData(String newData) {
rwLock.writeLock().lock(); // Απόκτηση κλειδώματος εγγραφής
try {
// Εγγραφή δεδομένων
this.data = newData;
} finally {
rwLock.writeLock().unlock(); // Απελευθέρωση κλειδώματος εγγραφής
}
}
}