17 Mart 2019 Pazar

ReentrantReadWriteLock Sınıfı - Read ve Write Farkı Gözetir

Giriş
Şu satırı dahil ederiz. ReadWriteLock arayüzünü gerçekleştirir
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
- Eğer ve Read ve Write farkını gözetmek istemezsek ReentrantLock  kullanılır. 
Bu sınıf ReadWriteLock arayüzünden kalıtır
Kullanım
Örnek
Şöyle yaparız
public class Foo {
  ReadWriteLock lock = new ReentrantReadWriteLock();
  Lock readLock = lock.readLock();
  Lock writeLock = lock.writeLock();

  public void write (...) {
    writeLock.lock();
    try {
      ...
    } finally {
      writeLock.unlock();
    }
  }

  public void read (...) {
    readLock.lock();
    try {
      ...
    } finally {
      readLock.unlock();
    }
  }
}
Örnek
Şöyle yaparız
private final ReadWriteLock LOCK = new ReentrantReadWriteLock(); private Collection<String> listOfNames = new ArrayList<>(); public void addName(String name) { LOCK.writeLock().lock(); try { listOfNames.add(name); } finally { LOCK.writeLock().unlock(); } } public boolean isInList(String name) { LOCK.readLock().lock(); try { return listOfNames.contains(name); } finally { LOCK.readLock().unlock(); } }

constructor
Şöyle yaparız.
ReadWriteLock accountLock = new ReentrantReadWriteLock();
getReadLockCount metodu
Örnek
Şöyle yaparız
ReadWriteLock rwLock = new ReentrantReadWriteLock();
Lock readLock = rwLock.readLock();
Lock writeLock = rwLock.writeLock();
...
rwLock.getReadLockCount();
readLock metodu
Şöyle yaparız.
public double getBalance() {
  this.accountLock.readLock().lock();
  double balance =  ...
  this.accountLock.readLock().unlock();
  return balance;
}
writeLock metodu
Şöyle yaparız.
public void addAmount(double amount) {
  this.accountLock.writeLock().lock();
  ...
  this.accountLock.writeLock().unlock();
}


Hiç yorum yok:

Yorum Gönder