# 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(); } ```