# Kilit Nesneler ile Ãok Kanallı Programlama (Locks in Java) âsynchronizedâ anahtar kelimesi ile âCritical Sectionsâ kod bölgelerini sıralı eriÅime açıp Threadâlerin ortak kullandıÄı bu alanı düzgünce kullanabilmelerini saÄlıyorduk. Aynı Åekilde âLockâ yani kilit mekanizmaları ile belli kod bloklarını âsynchronizedâ gibi sıralı eriÅime açabiliriz. Bunun için âReadWriteLockâ sınıfını kullanarak hem okuma hem de yazma iÅlemleri için sıralı eriÅim olanaÄı veren bir örnek geliÅtireceÄiz. Bunun için âSimpleCounterâ isminde âRunnableâ interfaceâden kalıtım alan bir sınıf tasarlıyoruz. ```java public class SimpleCounter { private volatile int counter; private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); public SimpleCounter() { this.counter = 0; } public void incrementCounterWithThreadSafety(String threadName) { this.readWriteLock.writeLock().lock(); try { this.counter++; System.out.println("Counter was updated to '" + this.counter + "' from " + threadName); } finally { this.readWriteLock.writeLock().unlock(); } } public int readCounterWithThreadSafety() { this.readWriteLock.readLock().lock(); try { return this.counter; } finally { this.readWriteLock.readLock().unlock(); } } } ``` Yukarıdaki örnekte âreadWriteLockâ isminde bir nesne oluÅturuyoruz. Bizim kod içindeki kilit mekanizmamızı bu nesne yönetecektir. âincrementCounterWithThreadSafetyâ metodu içinde deÄiÅkenin deÄerini güncelleyeceÄimiz için bir yazma iÅlemi yapacaÄız bu nedenle aÅaÄıdaki komutla bir yazma kilidi alıyoruz. ```java this.readWriteLock.writeLock().lock(); ``` Ardından koruma altına almak istediÄim kod bloÄunu bir âtryâ bloÄu içine yerleÅtiriyorum. İÅlemler bitince ise aÅaÄıdaki gibi kilidi serbest bırakıyorum. ```java finally { this.readWriteLock.writeLock().unlock(); } ``` Hatırlayacaksınızdır, finally anahtar kelimesi ile âtryâ bloÄunda hata olsun veya olmasın mutlaka çalıÅtırılırdı. Mutlaka kilidi öyle ya da böyle serbest bırakıyorum. Kilidi serbest bırakamazsam sıkıntılı sorunlarla boÄuÅabiliriz. âreadCounterWithThreadSafetyâ metodunda ise âcounterâ isimli deÄiÅkenin deÄerini okuyacaÄız ve burada da okuma yaptıÄımız kod bloÄunu korumaya almak istiyoruz diyelim. Bu durumda ise okuma kilidini alıp kullanacaÄız ve sisteme geri iade edeceÄiz. ```java this.readWriteLock.readLock().lock(); ``` iÅimiz bitince aÅaÄıdaki gibi finally bloÄu içinde mutlaka kilidi serbest bırakıyoruz. ```java finally { this.readWriteLock.readLock().unlock(); } ```