Dahasonra 6.haftaya kadar egzersizler için çikarilmaya baslanir. Zon 7 yaralanmalarinda tendonlarin birbirleri ile yapisikliklari sonucu olusacak kisitliligi onlemek için 3.haftadan itibaren bir parmak ekstensiyonda iken digeri 30 ‘ fleksiyona , 4.haftada 45 ‘ , 5.haftada 60 ‘ , 6. haftada 90 ‘ fleksiyona getirilir.
KPSSNE ZAMAN YAPILACAK? 2021-KPSS A Grubu Ve Öğretmenlik (Genel Yetenek-Genel Kültür, Eğitim Bilimleri) oturumları 1 Ağustos’ta düzenlenecek. 2021-. 25 Şubat 2021 Site arşivi içinde belirli bir içerik arıyorsanız, yukarıdan arama yaparak daha hızlı sonuca ulaşabilirsiniz
Budeğerin minimum 15 ila 20 arasında olması gerekir. Eğer HCG değeri 5 ve 5 üzeri ise en az 2 gün beklendikten sonra değere yeniden bakılması yani yeniden kanda gebelik testi yapılması gerekir. Hamileliğin sağlıklı bir gebelik olup olmadığının anlaşılabilmesi için ise HCG değerinin en az 1000 mlU/ml olması gerekir.
TOEFLiBT sınavına girdiğinizde önemli olan tek şey, ne bildiğinizdir, sınava nerede girdiğiniz, neye benzediğiniz veya sınavınızı kimin puanladığı değildir. Tutarlılık, adillik ve kaliteyi sağlamak ve dil becerilerinizin tam ve doğru bir resmini sunmak için, tüm puanlama, merkezi bir puanlama ağı tarafından yapılır
Ayaktarak kemiği kırıklarında alçı tedavisi 2 hafta ile 6-8 hafta arasında değişebilir. Ağrı bazen 2-3 ay kadar sürebilir fakat yürümek ayak tarak kemiği kırıklarında en iyi egzersizdir ve yürümeye başladıktan sonra kaslar güçlenir ve ağrı azalır. Bu süreçte kaslar zayıfladığı için de basmak güç olabilir.
oNPa. java101 BIRINCI BOLUM Java Nedir ? Java Tarihçesi Java Dilinin Basarisi Nedir ? Cop Toplayici Nedir? Java Nasil Calisir? JDK JRE JVM Kavramları Değişkenler Nesne Degiskenleri Statik degiskenler Yerel degiskenler Parametre degiskenleri Depolanan veriler nerede tutulur ? Stack Kavramı Heap Kavramı Veri Tipleri Ilkel Veri Tipleri Tamsayilar Ondalik Sayilar Karakterler Mantiksal Tipler Ilkel Veri Tipleri arasinda tip donusum islemleri Referans Veri Tipleri - Referans Veri Tipleri ayni objeyi gostermesi IKINCI BOLUM YARIN DEVAM EDELIM Operatörler Atama Operatorleri Aritmetik Operatörler Karşılaştırma Operatörler Mantıksal Operatörler Bit Tabanlı Operatörler UCUNCU BOLUM YARIN DEVAM EDELIM Kontrol Ifadeleri if else switch case DORDUNCU BOLUM YARIN DEVAM EDELIM Donguler while dongusu do while dongusu for dongusu for each Continue anahtar kelimesi kullanimi BESINCI BOLUM YARIN DEVAM EDELIM String Operations String Karsilastirma String Length String Upper Case & Lower Case String indexOf String charAt String Concatenation String Trim String SubString String Manupilation Math Operations IEEE-754 Virgullu Sayi Gosterimi Bir kac farkli durum icin java derleyicisinin nasil ciktilar verdigine bakalim. Wrapper Classes Cache Mechanism Integer Sinif Case Study Fonksiyonlar Diziler Kalitim ve Komposizyon KALITIM KOMPOZISYON POLIMORFIZM Eşzamanlılık Concurrency ve Paralellik Parallelism - Merkezi Islem Birimi ve Cekirdek Nedir ? Is parcalari ile iliskisi nedir ? - * Neden Multithreading yapilara ihtiyac vardir? - Multithreding Maaliyetleri - Multitasking nedir? - Concurrency - Parallel Execution Paralel Calismak ve Parallelism Paralellik,Dagitik Detaylarin ozeti Soru cevaplar ile devam edelim. Thread nasil olusturulur ? Thread sinifi veya Runnable arayuzu nasil kullanilir ? Lambda function kullanarak Thread olusturalim ExecutorService kullanarak Thread olusturma Thread yasam dongusunun ogrenelim Durumlarin kod orneklerine bakalim Is parcalarinin birbirilerine sinyal gonderme islemleri Synchronized Anahtar kelimesi - Sinifin Nesnesine Ait Metot - Sinifin Nesnesine Ait Metot Icinde istenilen bir bolge - Static Metot - Static Metot Icinde istenilen bir bolge ReentrantLock ile lock mekanizmalari Deadlock Deadlock tan nasil kacinilir. YARIN DEVAM EDELIM - Farkli is parcalari ayni kod parcasina ayni anda erisirlerse ne olur ? Race Conditions Thread Local Kullanimi - Is parcalarinin calisma senaryolarina gore degiskenlerin erisilebilirlik durumlari - Seperate - Shared Volatile Anahtar kelimesi Atomic degiskenler - Atomic Boolean - Atomic Integer - Atomic Long - AtomicIntegerArray - AtomicLongArray - Atomic Reference - Compare And Swap Concept CAS - A-B-A Problem - Atomic Stamped Reference java101 BIRINCI BOLUM Java Nedir ? Java hem bir dil hem de bir ortam olarak dusunebilirsiniz. Dilin kullanildigi yerlere birkac ornek verelim. Web uygulamalari Masaustu uygulamalari Oyunlar Android gibi temel gucu buyuk oranda java tarafindan gelen mobil uygulamalar gelisitirebilirsiniz. Java Tarihçesi 1995 yilinda James Gosling tarafindan tasarlanarak baslanan bu java projesi zamanla farkli tarihsel surecler gecirdi. Java dilini dunyaya tanitan ve daha hizli yayilmasini saglayan Sun Microsystems isimli firmadir. Uzun yillardan sonra Oracle firmasi bu firmayi satin aldigi icin Java diline ait tum haklar el degistirmis oldu. JDK Beta 1995 1996 JDK 1997 Java Database Connectivity - JDBC Java dili kullarak veritabanlarina erismek ve islemler yapmak istedigimizde bize yardimci olan kutuphane gibi dusunebiliriz. JDBC Yazdigimiz kod ile vertabana ozel yazilmis kutuphaneler arasindaki bir noktayi temsil eder. Farkli varitabanlarina baglanmak icin ek olarak farkli kutuphanelere ihtiyacimiz var. Veritabani kutuphanelerini Java yi gelistirenler gelistirmiyorlar. JAVA PROGRAMI -> JDBC ->->-> JDBC DRIVER MySQL ->->-> JDBC DRIVER SQL Server ->->-> JDBC DRIVER Oracle ->->-> JDBC DRIVER PosgtreSQL ->->-> JDBC DRIVER SQLite ->->-> JDBC DRIVER Microsoft Access ->->-> JDBC DRIVER Mongo J2SE 1998 Java Swing - Java dili kullanarak masaustu uygulamalar yazilmasinin onu acilmis oldu. Java Server Pages - HTML icinde Java kodlari calistirilabilir hale geldiginden internet siteleri JSP kullanarak kodlanmaya baslandi. - ASP ve PHP ye cok benzer fakat java kullanilan halidir. J2SE 2000 XML teknolojisi ile java artik iletisim kurabilecek duruma gelmis bulunuyor. J2SE 2002 J2SE 2004 Enum, For each gibi yapilar java ya eklendi. Java SE 6 2006 Java SE 7 2011 Switch icerisinde String kullanma ozelligi geldi. Java SE 8 LTS Mart 2014 Java SE 9 Eylul 2017 Java SE 10 Mart 2018 Java SE 11 LTS Eylul 2018 Java SE 12 Mart 2019 Java SE 13 Eylul 2019 Java SE 14 Mart 2020 Java SE 15 Eylul 2020 Java SE 16 Mart 2021 Java SE 17 LTS Eylul 2021 Java SE 18 Mart 2022 Java Dilinin Basarisi Nedir ? Bellek problemlerini cozmesidir. Nesneye yonelik progamalamaya uygun olmasi programlarimizi yazarken daha uygun gelistirmeler yapmamizi sagliyor. Cok uzun yillardan beri sagladigi "bir kez yaz her yerde calistir" olanagini saglamasidir. Cop Toplayici Nedir? Programlarimizin calisma suresi boyunca ortaya cikan ve sonradan kullanilmayan gereksiz nesneleri bulur ve onlari temizler. Mekanizmanin adi cop toplayici garbage collector olarak bilinir. C++ gibi dillerde bellekte yer kaplayan bilgilerin temizlenmesi sorumlulugu kodlama yapana ait iken , java dilinde kodlama yapan kisiye ait degildir. Cunku gereksiz ve kullanilmayan bellek alanlarini cop toplayici garbage collector temizlemektedir. Cop toplayici temizleme islemleri yaparken kullanilan java versiyonlara gore yillar icinde degiserek farkli yontemler ile isini halleder. referans sayma yontemi kopyalama yontemi isaretle ve supur yontemi artansira yontemi vb. Java Nasil Calisir? Bit kavramini ogrendikten sonra nasil calistirigina bakabiliriz. Bit nedir? 0 veya 1 ile bilginin bellekte olmasi veya olmamasi durumunu karsiyalan terimdir. Bayt Byte ise 8 haneli bit ten olusan terimdir. Derleme Islemi Compile Time Kaynak Kod Javac Komutu Bayt Kod ================================================================== javac Calistirma Islemi Run Time Java Komutu ================================================================== java Hello Yorumlayici interpreter hersey yolunda gitti ise mutlu son JDK JRE JVM Kavramları JVM - Java Sanal Makinasi Java Virtual Machine - JVM isletim sistemi ile java kodumuz arasinda kopru gorevindedir. - Bu nedenle yazilan kod herhangi bir degisiklik yapilmadan bir kere yazip her yerde calistirabiliriz. JRE - Java Calistirma Ortami Java Runtime Environment - Java uygulamalarinin calismasi icin gereken kutuphanleri barindirir. JDK - Java Gelistirebilme Ortami Java Development Environment - Yazilimcilarin programlama yapabilmesi ve calistirabilmesine olanak saglar JRE icindedir. JDK = JRE + JVM Farkli JVM versiyonlari var HotSpot JVM Oracle Eclipse OpenJ9 GraalVM vb. Farkli JDK versiyonlari var. Oracle JDK Open JDK -> Amazon Correto -> SapMachine SAP JDK -> Azul -> Red Hat OpenJDK -> IBM OpenJDK vb. Proje baslangicida bir jdk/jvm secilerek kodlamaya baslanir. Neden farkli versiyonlar oldugunu arastirabilirsiniz ? Değişkenler En temel bilgi depolacagimiz birime DEGISKEN denir. Degiskenler RAM uzerinde saklanir. Program uzerinde tanimlandiklari yere gore etki alanlarina sahiptirler. Etki alanlarini kaybettiklerinde RAM uzerinden silinirler. int age = 20; - int veri tipi - age degisken adi - 20 degiskene atanan sayi degeri Her degiskenin tip ve etki alani ozelligi vardir. Degisken Tipleri; - Nesne degiskenleri - Statik degiskenler - Yerel degiskenler - Parametre degiskenleri Nesne Degiskenleri Bir sinif icerisinde tanimlanir ve sinifin tum nesneleri, ornekleri icin farkli degerler icerebilir. Peki Sinif nedir? Soyut veya somut kavramlari karsilayacagimiz programlarimizin ana bilesenleridir. Ornek Elimizde bir kitabimiz olsun. Kitabin var olmasini saglayan parcalara bakalim; - yazar - adi - tur - renk - sayfa sayisi - basilan matbaa Bu kitaba ait kalibimiz olsa, kolayca kitap uretebiliriz. Peki program yaziyoruz programimiza tanimlamak icin ne yapariz? - kitap isminde bir sinif olustururuz - parcalarini tanimlamak icin nesne degiskenleri olustururuz. Statik degiskenler Nesne degiskenleri, onune static anahtar kelimesi alarak, ayni siniftan olusturulan tum nesneleri, ornekleri, kopyalari icin ayni degeri almasi saglanir. Ornek - Elimizdeki kitap sinifindan 5 tane kitap olusturduk ve gerekli bilgileri doldurduk. - Eger yazar bilgisi static olarak tanimlanmis ise yazarin bilgisi tanimlandiginda tum kitaplarin yazari ayni olacaktir. - Cunku static olarak tanimlandiginda tum kitap nesneleri bellekte ayni yerden okuyacaktir. Yerel degiskenler Siniflarin icindeki metotlarin iclerinde tanimlanir. Peki Metot nedir ? Bir isme sahip, yapilmasini istedigimiz bir veya birkac islemin blok halinde cagrilabilir halidir. Metodu cagirarak o islemlerin yapilmasini saglariz. Yerel degiskenler o tanimlanan blogun disina cikildiginda etkilerini kaybederler ve ulasilamazlar. Parametre degiskenleri Siniflarin icindeki metotlarin iclerinde kullanilmak uzere gecici olarak aldigi degerlerdir. Depolanan veriler nerede tutulur ? Static alan RAM Static degisken ya da metotlar RAM uzerindeki heap alaninda tutulurlar. Java 8 den once PermGenPermenant Generation, sonra ise Metaspace isimli kalici bolgede konumlanirlar. Peki farklari nedir? PermGen sinifli bir boyutu var, Metaspace otomatik olarak boyutu artabilir. Stack RAM Heap RAM Kaydedilen dosyalar Hard Disk Stack Kavramı Javada kullanılan primitif ve yerel değişkenler ile objelerin referanslarının tutulduğu hafıza bölgesine stack diyoruz. Bununla birlikte, java memory management için Stack yığın yapısının Last In First Out LIFO - Son giren ilk çıkar türünü kullanmaktadır. Sırası ile adımları inceleyip anlamaya çalışalım. 1 Görüldüğü üzere main metodumuz ve main metodumuz içerisinde calculate isimli başka bir metod çağırma işlemi yapılmaktadır. 2 Java’da bir method çağırımı yapıldığında, ilgili değişkenler Stack’e sırası ile eklenmeye başlar. Bunun için öncelikle memory de boş bir stack yaratılır. 3 args = empty args main metoduna gönderilen parametre için stack üzerinde bir array tutar. 4 int value = 7 satırı için value = 7 olarak bir değer tutar. 5 value = calculatevalue methodu ile artık calculate metod çağırımı yapılır, bunun için calculate metodu içerisinde kullanılacak veri için stack’e bir değer daha eklenir. Burada dikkat edilmesi gereken iki husus vardır. -> value değişkeninin değeri pass by value şeklinde aktarılır. Yani ilgili değişkenin değerinin bir kopyası methoda argümen olarak gönderilir. -> calculate methoduna geçildiği anda artık main metod out-ouf-scope durumuan gelir. Bu aşamadan sonra main metodu içerisindeki value değerlerine erişim yapılamaz. 6 int = tempValue satırında tempValue için stack’e bir değer daha eklenir. 7 int = newValue satırında newValue için stack’e bir değer daha eklenir. 8 return olduğu andan itibaren stack üstünde bulunan veri, tempValue ve newValue alanları stackten silinir ve artık main method scopuna geri dönülmüş olur. 9 artık value değişkeninin değeri 20 olacaktır. 10 Kodumuzda bu aşamadan sonra işletilecek bir kod satırı kalmadığı için JVM tarafından ilgili stack boşaltılır. 11 Eğer stack üzerinde herhangi bir değer kalmadığında, JVM tarafından ilgili stack hafızadan silinir. Java’da bütün lokal değişkenler stacklerde tutulur, method çağırımı sonra erdiğinde jvm tüm değerleri sileceği için stack boş kalacaktır, böylelikle bu değişkenler hafızada yer kaplamaz. Ek bilgi Java’da her bir thread ın kendisine ait bir yığını bulunur. Bu da sizin oluşturduğunuz her thread in hafızada yer kaplayacağı anlamına gelir. Thread kavramı ve memory management nasıl olur bir araştırma konusu olsun lütfen. Heap Kavramı Stack kavramından bahsederken, stack üzerinde local değişkenlerin tutulduğundan bahsetmiştik. Heap dediğimiz şey ise aslinda Java tarafından nesnelerin tutulduğu yerdir. Java’da new anahtarı ile oluşturulan tüm nesneler memory de Heap denilen ve JVM tarafından yönetilen yerde saklanır. Yani javadaki tüm Objeler Heap üstünde tutulur. Aslinda bu bölgeler öyle gözle görünüp fark edeceğimiz şeyler değildir. Siz bir java uygulamasını çalıştırdığınızda, JVM sizin için memory de bellek tahsisallocation yapar ve bu yapılan tahsis içerisinde de bu bölümleri ayırır. Bir java uygulaması için minimum bellek ihtiyacı ne kadardır? Çok fazla bellek ihtiyacımız varsa bunu nasıl yapabiliriz? Aşağıdaki örnekte, iki farklı değişken hafızada nasıl tutulduğunu görebiliyoruz. Şimdi objelerin heap üstünde nasıl tutulduğuna daha iyi anlamak için aşağıda kodu inceleyelim. Yukarıda main metod içerisinde bir String Listesi oluşturuluyor. Oluşturulan String listesine 3 eleman ekleniyor ve eklenen elemanlar, printList metoduna gönderilerek her eleman yazdırılıyor. Şimdi bu program parçasının hafızada JVM tarafından nasıl tutulduğuna bakalım. 1 List myList = new ArrayList satırı ile Heap bölgesinde bir list objesi tutuluyor. 2 komutu ile yine Heap bölgesinde String verisi taşıyan ve değeri One olan bir obje daha tutuluyor. not, burada new String“One” olarak düşünelim, daha anlaşılır olur. 3 Diger eleman ekleme işlemleri için de aynı adımlar uygulanıyor ve artık List objesi üzerinde tutulan String objelerinin heap bölgesinde referansları tutuluyor. Örneğimize printList methodunu değiştirerek farklı bir açıdan bakalım. 1 String value = dediğimizde, listenin birinci elemanındaki değeri yeni bir değişkene atıyoruz. value isimli bir değişkenin stack üzerinde String objesinin referansını tuttuğunu görüyoruz. Dikkat ederseniz, burada aynı objeye iki farklı referans veriyoruz. Liste içerisinde bulunan List objesi içerisinde birinci String içerisindeki eleman ile Stack üzerinde bulunan value değişkeninin referansı aynı yere bakıyor. İşte bu da Java’da Pass by Reference olarak nitelendiriliyor. 2 Stack üzerinde bulunan myList objesi artık out-of-scope durumundadır ve biz bu değişkene erişim yapamıyoruz, erişebildiğimiz değişkenler data ve value değişkenleridir. 3 ile liste objesine artık yeni bir string değer daha ekliyoruz. 4 -Listenin tüm elemanları yazdırıyoruz ve sonrasında value ve data değişkenleri stack üzerinden siliniyor çünkü metodumuz bitti. Veri Tipleri Yazdigimiz programlarin kullanmasini istedigimiz bilgileri, veri tipleri ile siniflandirabiliyoruz. Harf, kelime, cumle veya bircok farkli sayi gosterim seklini farkli veri tipler araciligi ile programimiza tanititabiliyoruz. - Java tip-guvenli type-safe bir dildir. Bu durum, degisken tanimlamak istedigimizde mutlaka veri tipinin ne oldugunu tanimlamak zorunda oldugumuzu ifade eder. Ilkel Veri Tipleri Primitive Tip Uzunluk Minimum Değer Maksimum Değer Varsayılan Değer Sinif-Nesne Tipi char 16 Bit Unicode 0 Unicode 2^16-1 \u0000’ Character long 64 Bit -2^63 2^63-1 0L Long int 32 Bit -2^31 231-1 0 Integer short 16 Bit -2^15 215-1 0 Short byte 8 Bit -2^7 2^7-1 0 Byte double 64 Bit Double float 32 Bit – Float boolean 1 Bit false Boolean Tamsayilar - byte byte b = 65; - short short s = 65; - int int i = 65; - long long l = 65L; Ondalik Sayilar - float float f = 65f; float f = 65F; - double double d = double d = Peki bu calisir mi ? double example = Sorunun Cevabi Icin Tikla Evet. Aslinda burada double olusturulur. Karakterler - char char c = 'A'; char c = 65; // Buyuk A harfinin ascii tablosundaki karsiligidir. Peki bu calisir mi? Sorunun Cevabi Icin Tikla // Boyle tanimalama yapamazsiniz. Bu farkli birsey demektir. String Mantiksal Tipler - boolean boolean b = true; Ilkel Veri Tipleri arasinda tip donusum islemleri Ornek int tipindeki bir degeri short tipine cevirebiliriz. Fakat veri kaybi olur. int tipindeki bir degeri long tipine cevirebiliriz. Veri kaybi olmaz. Referans Veri Tipleri Yukaridaki Ilkel veri tiplerinin gelistirilmis sinif mantigina dayanan halleri vardir. Ayni degerleri siniflar yardimi ile olusturabiliyoruz. Character Long Integer Short Byte Double Float Boolean Peki ama neden bu siniflara ihtiyacimiz var ? Bu soruların cevabını verebilmek için int ve Integer arasındaki farkı anlatarak cevaplamaya çalışayım. int primitiveNumber = 5; Integer objectNumber = new Integer5; Yukaridaki tanimlamalarin farklina bakalim. - int bir primitive veri tipidir Integer ise bir nesnedir - Integer bir nesne değişkeni olduğu için null değeri alabilir fakat int veri tipi null değeri alamaz. Herhangi bir değer ataması yapılmadığında ilgili veri tipinin default değerini alır. Integer nesne değişkenine herhangi bir değer ataması yapılmadığında null değeri alır. - Integer tipinde bir değişken sınıfında ki metotları kullanabilir, int veri tipi ise kullanamaz. - Integer tipinde ki değişkenleri bir vektör ya da koleksiyon içerisinde tutabiliriz fakat int veri tipi ile bunu yapamayız. - Primitif veri tipleri byte, short, int, double, float, double, char, boolean bir nesne olmadığı için serializeserileştirme işlemine tutamayız. Serileştirme nedir, nerelerde kullanılır, ne zaman kullanılır gibi soruları lütfen araştırınız. - Integer gibi sınıflar immutable değişmez özelliğe sahiptirler, sıradan nesneler gibi davranmazlar. Bununla birlikte ek bir not olarak; Java derleyicisi gerektiğinde tanımlanan her ilkel veriyi ait olduğu sınıfa otomatik olarak gömer buna kutulama boxing denilir ya da derleyici gerektiğinde bir sınıf nesnesini ilkel veri tipine döndürür buna da kutu açma unboxing denilir. Her iki işlemi de Java derleyicisi kendiliğinden otomatik yapar. Referans Veri Tipleri ayni objeyi gostermesi Ornek Iki adet obje tanimlayip ayni referansa baglayalim. Ayrıca bir referans değişkeninde saklanan bir nesnenin referansını başka bir referans değişkenine atayabilirsiniz. Bu gibi durumlarda, her iki referans değişkeni de bellekteki aynı nesneye atıfta bulunacaktır. VisualVM aracini heap alanindaki bilgilere bakmak icin inceleyebilirsiniz. IKINCI BOLUM YARIN DEVAM EDELIM Operatörler - Operatörler ilsem ozelligi olan simgelerdir. - En basit toplama + cikarma - carpma * bolme / birer operatordur. Java’da operatörleri yaptıkları işe göre sınıflandırabiliriz. - Atama Operatörleri - Aritmetik Operatörler - Karşılaştırma Operatörler - Mantıksal Operatörler - Bit Tabanlı Operatörler Atama Operatorleri = Sağdaki değeri soldaki değere atar. += Soldaki sağdakine ekler, sonucu soldakine atar. -= Soldakini sağdakinden çıkarır, sonucu soldakine atar. *= Soldakini sağdaki ile çarpar, sonucu soldakine atar. /= Soldakini sağdakine böler, sonucu soldakine atar. %= Soldaki ile sağdakinin modunu alır, sonucu soldakine atar. Ornek Ornek Aritmetik Operatörler + Toplama İşlemi - Çıkarma İşlemi * Çarpma İşlemi / Bölme İşlemi % Mod alma iki sayiyi birbirine bol kalani cevap olarak don - Bir eksiltme ++ Bir arttırma Ornek Karşılaştırma Operatörler == Eşittir Büyüktür = Büyük Eşittir != Eşit Değildir Ornek Ornek Buyuk Integer isimli siniftan olusturulan iki farkli degiskeni karsilasitralim. Javascript dilinde farkli bir sekilde karsilasitiriliyor. == operatörü ile değişkenin değerlerine bakılırken === operatörü ile değişkenlerin referans değerlerine bakılır. Mantıksal Operatörler Degiskenleri karsilastirip, sonuc olarak boolean tipinde veri donmesini istedigimiz durumlarda operatorler kullaniriz. AND && Sağındaki ve solundaki ifadelerin ikisi de doğru ise “true” sonuç döndürür diğer durumlarda “false” döner OR Sağındaki ya da solundaki herhangi birisi doğru ise “true” sonuç döner diğer durumlarda “false” döner. XOR ^ Sağ yada soldaki her iki ifade de aynı ise yani true – true yada false – false gibi . sonuç “false” olarak döner diğer durumlarda “true” döner. NOT != Kendisinden sonra gelen ifadenin değerinin tersini alır. Ornek Bit Tabanlı Operatörler AND & İki sayının ikilik tabanda birbirine karşılık düşen her bitini "ve" işlemine sokarak bir sonuç elde eder. 2 uzeri 0 = 1 2 uzeri 1 = 2 2 uzeri 2 = 4 a = 5 = 0101 In Binary b = 7 = 0111 In Binary Bitwise AND Operation of 5 and 7 0101 & 0111 ________ 0101 = 5 In decimal Ve islemi nedir ? Basamaklar karsilastirilirken her ikisi 1 ise 1 diger durumlarda 0 olarak islemin sonucu her basamak icin ayri ayri yazilir. OR İki sayının ikilik tabanda birbirine karşılık düşen her bitini "veya" işlemine sokarak bir sonuç elde eder. Veya islemi nedir ? Basamaklar karsilastirilirken en az biri 1 ise 1 diger durumlarda 0 islemin sonucu her basamak icin ayri ayri yazilir. XOR ^ İki sayının ikilik tabanda birbirine karşılık düşen her bitini "özel veya" işlemine sokarak bir sonuç elde eder. Ozel veya nedir ? Basamaklar karsilastirilirken birbirinden farkli ise 1 diger durumlarda 0 islemin sonucu her basamak icin ayri ayri yazilir. Right Shift >> Bir sayının ikilik tabandaki karşılığını bir basamak sağa kaydırır. İkilik tabanda 2 ile "bölme" olarak da adlandırılabilir. Isaret biti nedir ? Sayi negatif ise 1, pozitif ise 0 dir. Bu islem nasil yapilir? Sayiyi binary olarak yaz. Sayının bitlerini sağa kaydırır ve kalan soldaki boşlukları işaret biti ile doldurur. Left Shift >> Ayrintiya girmeyelim. Unsigned Left Shift = -128 && i WORKER -> WORKER -> WORKER Is basla Is basla Is basla Is basla objelerin durumlarinin birbirinden ayri sekilde korunabildigi yapilar populer olmustur. event driven Ornek A bir satir bir kolon olan tabloda elimizdeki deger 5 bir islem geldi 1 artti ve o satir guncelledin 6 bir islem geldi 1 azaltti ve o satir guncellendi 5 bir satir bir kolon olan tabloda elimizdeki son deger 5 B bir satir bir kolon olan tabloda elimizde deger 5 bir satir daha atildi ve kolona +1 yazildi bir satir daha atildi ve kolona -1 yazildi biz artik tum kolonlardaki islemleri yaptiktan sonra cevabi donuyoruz yani 5 istersek onceki durumlara da ulasabiliyoruz veya geri donebiliriz. tum objelerin kendi durumlari korundu ve asenkron olarak bagimsiz islem yapildi. Bazi projeler - - Java NIO adli java icindeki paket - - - - - - - LMax Disrupter - Java 7 Fork and Join framework - Java 8 Collection streams API Parallel Execution Paralel Calismak ve Parallelism Paralellik,Dagitik Her cekirdek farkli gorevleri yerine getirebilmesine Parallel Calismak denir. Fakat Birden fazla cekirdek ayni görevin birkaç alt is parcasini tam anlamıyla aynı anda çalışmasına paralellik,dagitik Parallelism denir. Bir CPU da uretilen alt gorev baska cpu userinde kosabilir. Her göreve veya alt göreve bir çekirdek atayarak, CPU'nun çok çekirdekli altyapısını kullanarak aynı anda görevlerin bölümlerini VEYA birden fazla görevi fiziksel olarak çalıştırır. Detaylarin ozeti Eşzamanlılık, iki görevin çakışan zaman dilimlerinde başlatılabileceği, çalıştırılabileceği ve tamamlanabileceği zamandır. Paralellik, görevlerin tam anlamıyla aynı anda çalışmasıdır, Eşzamanlılık, bağımsız olarak yürütülen süreçlerin bileşimidir, paralellik ise muhtemelen ilgili hesaplamaların eşzamanlı yürütülmesidir. Bir uygulama eşzamanlı olabilir ancak paralel olmayabilir; bu, aynı anda birden fazla görevi işlediği, ancak aynı anda iki görevin yürütülmediği anlamına gelir. Parallel ayni anda olur. Bir uygulama hem paralel hem de eşzamanlı olabilir; bu, aynı anda çok çekirdekli bir CPU'da birden çok görevi eşzamanlı olarak işlediği anlamına gelir. Tek çekirdekli bir CPU'da eşzamanlılık elde edebiliriz, ancak paralellik edemeyiz. Eşzamanlı bir sistemde farklı iş parçacıkları birbirleriyle iletişim kurar. Dağıtılmış,paralel bir sistemde farklı süreçler veya farkli bilgisayarlar birbirleriyle iletişim kurar. Farkli bilgisayarlarin bir arada calistigi sistemler var. Apache Hadoop ile cluster kurulumu, Apache Cassandra NoSql dagitik veri tabani Soru cevaplar ile devam edelim. SORU Bir işlemci aynı anda kaç iş parçacığı işleyebilir? tek cekirdek cift cekirdek sekiz cekirdek CEVAP Sorunun Cevabi Icin Tikla Tek bir CPU çekirdeği, çekirdek başına en fazla 2 iş parçacığına sahip olabilir. Örneğin, bir CPU çift çekirdekliyse 4 iş parçacığına sahip olacaktır. bir CPU sekiz çekirdekliyse 16 iş parçacığına sahip olacaktır. SORU Bir görevde bir iş parçacığı mi yoksa çoklu iş parçacığı çalıştırmak daha mı iyi? CEVAP Sorunun Cevabi Icin Tikla Duruma gore degisebilir, Cok fazla thread olusturmanin maliyeti ve bunlarin atama yapilmasi tek parca ile yapilacak isin maliyetini, hafiza olarak gecebilir. Gereksiz yere thread acilip kulanilmaya calisilmasi. SORU Daha fazla cekirdek mi yoksa daha fazla thread mi iyidir? CEVAP Sorunun Cevabi Icin Tikla Temel olarak, daha fazla çekirdek ve daha fazla iş parçacığı dengeli sekilde kullanilmasi aslinda en performansli olani. Iki durumu karsilastirmak aslinda garip. Cekirdekler, isi yapanlar gercek CPU lardir. Buna araba diyelim Is parcalari, is yapma istegidir Buna surucu diyelim Aslinda soru, daha cok arabaya sahip olan bir kisi mi yoksa daha cok surucusu olan bir araba mi gibi birsey oluyor. Çekirdekten daha az iş parçacığınız varsa; ekstra çekirdekler boşa harcanır. Veya Geçmişte, birçok oyun birden fazla CPU çekirdeğinden tam olarak yararlanmak için programlanmadığından, yüksek çekirdek sayısına sahip bir CPUya sahip olmak genellikle pek bir şey ifade etmiyordu. Yeni oyunlarda bunalara dikkat etmeye basladilar fakat hala tek cekirdek uzerindeki performans coklu cekirdek uzerindeki calismasindan daha onemli durumdadir. Bir ornek ile konuyu genisletelim Bir program yazilmasi isteniyor. Elimizdeki dosyalar icin; Bir kaynaktan alinan dosyanin icerisindeki kolonlarin alfabetik siraya gore duzenlenip icinde bulundugumuz bilgisayara yazma islemi yapilmasi bekleniyor C, A, B kolonlari mevcut A, B, C kolonlarina cevir - T1 dk zamaninda; Bize dosya gonderiliyor biz bunu okuyoruz. - T2 dk zamaninda; Kaydedilen dosyaya cevirme islemi yap - T3 dk zamaninda; Okudugumuz dosyayi bilgisayara kaydediyoruz. Yukaridaki 4 dosya icin ortalama olarak tum islemlerin gerceklesme suresi T1 + T2 + T3 * DOSYA_SAYISI ~ = Toplam gecen yaklasik sure CPU nun verimsiz kullanilmasi diye bir durum var. Eger bir uygulama okuma veya yazma islemi yaparken aslinda CPU komutu vermis ve o islemin okumasini veya yazmasini bekliyor ve islem suresince bosta bekliyor. Bu verimsiz bir yontem neden beklesin ki ? Calistiralim Yukaridaki gibi tek bir is parcacigi icinde islemleri yaptigimizda gecmesi gereken sureyi hesapladik. Peki 3 adim icin tek bir is parcasi yerine, 3 ayri is parcasi kullansak sonuc nasil degisir? OKUMA islemlerinin hepsi bir is parcasinda olsun, HESAPLAMA islemlerinin hepsi hesaplama bir is parcasinda olsun, YAZMA islemlerinin baska bir is parcasinda olsun, Her T ani icin 1 dk sure harcadigini dusunelim. ==== T1 OKUMA + T2 HESAPLAMA + T3 YAZMA ==================== ==================== T1 OKUMA + T2 HESAPLAMA + T3 YAZMA ======================================= Yukaridaki tasarimda HESAPLAMA is parcacigi OKUMA is parcaciginin dogru bir okuma gerceklestirip gerceklestirmedigini kontrol etmesi lazim. Yani bittigini kontrol etmesi lazim. Cunku birbirinden bagimiz sekilde farkli is parcalarinda islemler yapildi. Benzer sekilde YAZMA is parcacigi HESAPLAMA is parcaciginin isini dogru yaptigindan hatta bittiginden emin olmasi lazim. Kisaca birbirinden haberleri olmasi lazim. Bu tasarim bize problem olusturdu. Diger cozum Bunun yerine OKUMA HESAPLAMA YAZMA islemi icin bir is parcacigi olsun fakat dosya basina ayri is parcacigi uretilebilsin. O zaman ayni anda farkli dosyalar icin islemler yapilabilir. Bu tasarimda dikkat edilmesi gereken nokta birinin okudugunu digeri okumayacak veya birinin hesapladigi anda digeri de ayni dosyayi hesaplamamasi lazim. Thread nasil olusturulur ? Thread sinifi veya Runnable arayuzu nasil kullanilir ? Yazdigimiz uygulamalar aslinda temel olarak main thread olarak bilinen yapilar ile calismaya baslar. Ornek Elimizdeki 100 adet kutu iki calisan tarafindan satisa sunulmadan once tekrar sayilmasini istiyoruz. Esit veya farkli kutu sayilari vererek tum kutulari sayabiliriz. Iki calisanin kutu sayma sayilari birer birer veya ikiser ikiser olabilir fakat sayma hizlari normal sartlarda ayni olamaz. Biz gorevi verip calismaya baslayabilirsiniz diyecegiz onlar gorevlerini bitirince bize haber verecekler Bir ana is parcasi yazacagiz main, altinda iki kucuk is parcalarichild yazacagiz. Bu programi yazalim Kalitimdan ogrendigimiz extends anahtar kelimesi yardimiyla olusturacagimiz islere; sizler birer is parcasisiniz tanimi yapacagiz. Thread sinifini kullanarak is parcacigi olusturdugumuz icin is parcacigini hazir duruma getirmek icin start calismasi icin run metodu kullanildi. Kalitimdan ogrendigimiz interface kavraminin bize sagladigi sadece o is icin bir ozellik ekleme faydasindan yararlanarak thread olusturabiliyoruz. Soru Is parcasinini tanimlamasini yaptiktan sonra yerine metodu cagirirsak ne olur ? Sorunun Cevabi Icin Tikla Yeni bir thread olusmaz main thread uzerinde sadece metot cagrisi yapmis oluruz. Cevap ile ilgili ornek Runnable interface sadece tek metoda sahiptir. Java 8 ile gelen asagidaki tanimlamanin bir anlami var. Soru Bu kavramin ne anlama geldigini bilen var mi? Sorunun Cevabi Icin Tikla Java 8 ile gelen Lambda ifadelerini kullanmak icin arayuzun interface isaretlenmesi ve icinde sadece abstract olacak sekilde tek metot tutmasidir. Lambda function kullanarak Thread olusturalim ExecutorService kullanarak Thread olusturma Thread yasam dongusunun ogrenelim Bir thread yasam dongusu boyunca asagidaki durumlarda olabilir. NEW Bir is parcasi obje olarak olusturulmus fakat start ile hazir hale getirilmediginde bu durumdadir. RUNNABLE start ile hazir hale getirildiginde bu durumdadir. BLOCKED Bir is parcacigi koruma olan bir bolgede calisiyor. Calisma uzun suruyor. Ikinci is parcasi birinci is parcasinin calisacagi yerde calismak istiyor. Fakat ilk is parcasi islemini tamamlamadigi surece, ikinci is parcasi bu durumdadir WAITING Bir is parcasinin calismaya devam edebilmesi icin diger is parcasindan sinyal bekledigi durumdur. TIMED_WAITING Belirli bir bekleme süresine kadar başka bir iş parçacığının eylem gerçekleştirmesini bekleyen bir iş parçacığı bu durumdadır. TERMINATED Is parcasinin hayat dongusu bittiginde aldigi durumdur. Durumlarin kod orneklerine bakalim NEW - RUNNABLE Is parcasi ilk olusturuldugunda aldigi durum Blocked Waiting TIMED_WAITING Bir is parcasi belirli bir zaman araligi gectikten sonra calicak ise zamani gecmesini beklerken aldigi durumdur. TERMINATED Bir is parcasini baslatmak icin metodunu kullaniyoruz. Durdurmak icin metodunu kullanabiliriz. Fakat stop metodu is parcasinin devam eden bir isi var mi yok mu diye kontrol etmeden dogrudan bir istek atarak sonlanmasini sagliyor. Bu durum tehlikelidir. Cunku is parcasinin yapmasi gereken is yarim kalabiliyor. Bu nedenle kendimiz ozel olarak is parcacigimizi durduran yapilar gelistirmeliyiz. Is parcalarinin birbirilerine sinyal gonderme islemleri isimli sinifimizin 3 adet final anahtar kelimesine sahip metodu vardir. wait notify notifyAll final anahtar kelimesi ; - sinif seviyesinde olursa kalitim yapilmasi engellenir. - metot seviyesinde olursa metodun ezilmesi override - kullanildigi sinifta yeniden yazilmasi engelenir. - degisken seviyesinde olursa degerleri ilk atandiktan sonra degistirilemez. wait kullanimi parametresiz wait - kullanildigi is parcasi sonsuza kadar bekler fakat diger is parcalari notify veya notifyAll cagirdiginda calismaya devam eder. parametreli waitlong - kullanildigi is parcasi verilen parametre kadar sure bekledikten sonra calismaya devam edeer notify kullanimi - Bir veya birden fazla is parcasi bekledigi durumda yanlizca tek is parcasini uyandirir digerleri beklemeye devam eder. Hangisinin uyandirilacagi secimi isletim sisteminin kendi kararina baglidir. notifyAll kullaniimi - Tum bekleyen durumda olan is parcalarini uyandirir. Hangi sirada uyandirilacagi secimi isletim sisteminin kendi kararina baglidir. Ornek Iki adet bekleyen is parcasi olusturalim. Bir tane sinyal gonderelim yani notify calistiralim. Ikinci is parcasinin calisip calismadigini gozlemleyelim. notify yerine notifyAll yazarak programimizdaki tum is parcalarinin sonlandirildigini gorelim. Synchronized Anahtar kelimesi Farkli is parcalarinin ayni anda girmesini istemedigimiz bolgeyi Synchronized anahtar kelimesi ile isaretlerdigimizde bir is parcaasi isini bitirmeden digerinin girmesini engellemis oluruz. synchronized kullanildiginda birbirini bekleyecegi icin calisma suresinin daha uzun surmesinin sizin icin problem olmayacagini kodumuza taahhut etmis oluruz. Sinifin Nesnesine Ait Metot public synchronized void writerEverythingint value{ += value; } Sinifin Nesnesine Ait Metot Icinde istenilen bir bolge public void writerEverythingint value{ += value; synchronized this{ } } Static Metot public static synchronized void writerEverythingint value{ += value; } Static Metot Icinde istenilen bir bolge public classs User { .. .. public static void writerEverythingint value{ += value; synchronized } } } ReentrantLock ile lock mekanizmalari ReentrantLock sınıfı ile is parcalarinin aynı anda istedigimiz kod bolumunde calismasi Synchronized kelimesine benzer sekilde engelleyebiliriz. ReentrantLock lock = new ReentrantLock; ... ... //sadece 1 is parcasi ayni anda calisabilecegi alan Sadece okuma veya sadece yazma islemini kontrol etmek isteyebiliriz. ReadWriteLock readWriteLock = new ReentrantReadWriteLock; Lock readLock = Lock writeLock = // sadece 1 is parcasi ayni anda burayi okuyabilir // sadece 1 is parcasi ayni anda burayi yazabilir. Yukaridakilerin disinda recursive cagrilar yapildiginda birden fazla kez ayni lock islemini calistirmak veya bunlarla iliskili olan lock yapma islemimizin FairSync veya NoFairSync olmasinin farklarini arastirabilirsiniz. Yanlis kullanimlarda dead lock olarak adlandirilan durum olusmaktadir. Deadlock iki veya daha fazla is parcasinin calismak istedigi alandaki kilide ulasabilmesi fakat birbirlerinin kilidi birakmasini beklemesi fakat kimsenin orada calismak icin elindeki kilidi digerlerine birakamamasi olarak aciklanabilir. Deadlock tan nasil kacinilir. - Islemleri try finally bloguna alarak finally icinde kilidi ne olursa olsun acabiliriz. - Lock surelerini belirleyip otomatik sekilde tekrar actirabiliriz. - mekanizmasi ile eger kilitlenebilir durumda ise bu islemi yap gibi islemler yapabiliriz. YARIN DEVAM EDELIM Farkli is parcalari ayni kod parcasina ayni anda erisirlerse ne olur ? Race Conditions Eger bir is parcasinin gerceklestirdigi islem sonucu diger is parcasinin baslangicta erismesi gereken giris bilgilerini etkiliyor ise ve bu is parcalarinin calisma sirasi sizin icin onemli ise, farkli is parcalarinin sirasiyla calismasini saglamak icin yontemler gelistirmelisiniz. Cunku ayni anda ayni islem uzerinde farkli is parcalari calistiginda elde edilen sonuc buyuk olasilikla yanlis olacaktir. Genel olarak iki farkli durumda bu yontemi kendimizin gelistirmesi gerekir. - veri oku - degistir - yaz - veri kontrol et sonra aksiyona gecip islem baslatildiginda Ornek Ortak banka hesabindan farkli kisiler para cekiyor. Ayni zaman diliminde islem yapmaya calistiklarinda nasil bir durum ile karsilasiyoruz beraber inceleyelim. Odev En fazla iki is parcasi olusturacak sekilde, ayni uygulamayi bir is parcasi para cekiyor, diger is parcasi hesapta kalan son parayi kontrol edecek sekilde bir onceki uygulamadaki adimlari yeniden kodlama yapabiliriniz. Ornek Elimizdeki tek listeyi okuma yaparken ayni anda listeden eleman silersek listenin baslangictaki tutarliligi bozuldugu icin es zamanlilik problemleri yasariz. Ornekteki gibi hem okuma hem silme, birden fazla is parcasi calistirabilen veri yapisi ConcurrentHashMap ile cozume ulastik. de benzer bir yapitadadir. Fakat tek thread ile yapilan islemleri kabul etmektedir. Inceleyebilirsiniz. Ornek Eger iki farkli is parcasi onceden belirlenmis bir durumu ayni anda kontrol ettikten sonra hareket ediyorlar ise burada problem ile karsilasabiliriz. Ornek Elimizdeki 4 farkli sayiyi birer birer arttiran programi yazalim. Ilk adim olarak bizim icin kritik olan islemin tamamnin tek synchronized blogu olusturarak sonucu gorelim. Ikinci adim olarak birbirinden bagimsiz olan olaylari farkli synchronized bloklari olusturarak sonucu gorelim. Thread Local Kullanimi Istegidimiz objelerin sadece istedigimiz is parcasi tarafindan erisilebilir olmasini saglar. Objects thread-safe Her olusturulan is parcasinin kendisine ait ThreadLocal map yapisi bulunur. Iki farkli is parcasi ayni ThreadLocal nesnesine eristigi zaman, aslinda kendisine ait olan ThreadLocla nesnesinin erisebildigi degerleri donus saglar. Ornek Her is parcasi kendisi yazdigi veriyi okuyabiliyor fakat digerlerini etki edemiyor. Calistirip gorelim. Ornek Is parclasinin kullandigi ThreadLocal objesininin tum verilerini silmeye calisalim. Sadece kendi verilerinin silindigini gorelim. Ornek Farkli is parclari ile farkli ThreadLocal objelerini atama yaptiktan sonra olusturalim. iki thread ve iki threadlocal objesi olusturmamiza ragmen her thread tarafinda okundugunda farkli objeleri gorecegiz. Bunun sebebi her cagrildiginda new Object yeniden olusturuluyor. ilk is parcasi iki farkli threadlocal objesi uzerinde yeni objeler uretmis oluyor. ikinci is parcasi iki farkli threadlocal objesi uzerinde yeni objeler uretmis oluyor. Odev InheritableThreadLocal var onu da sizler inceleyebilirsiniz Is parcalarinin calisma senaryolarina gore degiskenlerin erisilebilirlik durumlari Herhangi bir thread calistiginda her thread kendi stack alanina erisebilir. Calisan metotlarin icindeki tum yerel local degisken tipleri ve degerleri boolean, byte, short, char, int, long, float, double her thread in kendi stack bolgesinde bulunur. bu nedenle bir thread icerisinde olusturulan yerel degisken diger thread tarafindan erisilemez. Hatta iki thread ayni kodu calistiriyor olsa bile her thread kendi stack bolgesinde ayni yerel degiskenleri tutup o anki degerini saklayacaktir. HEAP alaninda, uygulamamiz calistiginda tum objeler Boolean, Byte, Short ,Integer, Long, Float, Object olusturulur ve nerede olduguna bakilmaksizin global, local saklanir. KURAL Tek runnable veya cok runnable farketmeksizin yerel degiskenler thread korumalidir. Farkli is parcalari birbirinden bagimsiz olaylar ise herhangi bir problem yok fakat farkli is parcalari ayni kaynagi kullaniyorsa kullandigimiz degikenlerin global degisken yani sinifa ait veya yerel degisken yani sadece icinde bulundugu metodun kapsami boyunca hayattak kalan degisken olup olmadigina dikkat etmeliyiz !!!!!!!!!!!!!!!! Seperate T1 Global Object Object5eea0b9f Local Object Object19a5a312 Global Primitive Count 1000000 Local Primitive Count 1000000 T2 Global Object Object5eea0b9f Local Object bject502dee32 Global Primitive Count 1000000 Local Primitive Count 1000000 ================================ HEAP ====================================== runnable1 runnable2 ================================= HEAP ================================== ================================== Main Stack ================================== paramObject runnable1 ref runnable2 ref globalCount=0 globalCount=0 ======== Thread Stack 1 ======================= Thread Stack 2 ============ i=0; localCount=0 i=0; localCount=0 ============================================================================ Shared T1 Global Object Object57610202 Local Object Object59a6f69e Global Primitive Count 1028102 Local Primitive Count 1000000 T2 Global Object Object57610202 Local Object Object6b093046 Global Primitive Count 1028102 Local Primitive Count 1000000 ================================ HEAP ====================================== runnable1 ================================= HEAP ===================================== ================================== Main Stack ============================== paramObject !!!! Two threads will use same globalCount object !!!! !!!! because only one runnable object !!!! globalCount=0 ======== Thread Stack 1 ===================================== Thread Stack 2 ============ i=0; i=0; !!!! Two threads will use same localCount object !!!! !!!! because only one runnable object !!!! runnable1 ref localCount=0 ============================================================================ Volatile Anahtar kelimesi Volatile anahtar kelimesine sahip olan degiskenin Java derleyicisi ve Thread ler tarafindan on bellege okumak yerine her zaman ana bellekten degiskenin son verisinin okunmasi saglanir. Sinif veya metot ile kullanilmaz. Farkli is parcalari ayni anda ayni degisken uzerinde calisabilmesini sagliyor. Ornek Elimizdeki bir degiskeni bir is parcasi ile degerini arttiralim, diger is parcasi ile degeri degistiginde hemen ekrana yazalim. Ikinci is parcasi degerin degistigini anlayabilmek icin degeri aldiginda hafizadaki son deger olmalidir. Bunu saglayan volatile anahtar kelimesidir. Calistirdiktan sonra volatile anahtar kelimesini silip tekrar calistirarak hafizadan degilde cache ten okundugunu deneyimleyelim. Atomic degiskenler Atomik degiskenlerin isleyis mantigi Volatile anahtar kelimesi yardimiyla elimizdeki degiskenlerin istedigimiz obje tipinde tutulabilmesi ve obje seviyesinde islemler yapilabilmesini saglar. Degerler Volatile anahtar kelimesi ile tutuldugu icin birden fazla thread calistirmak istenildiginde herhangi bir koruma yapmaya gerek yoktur. Atomic kelimesi iceren siniflarindan olusturulan degiskenler okuma ve yazma islemini atomik olarak yaptigi icin birden cok thread calistiginda tutarsizlik olmayacaktir. Atomic Boolean boolean deger tutmak istedigimizde AtomicBoolean sinifindaki volatile int value; degiskeni yardimi ile bellekteki son bilginin alinabilmesini saglar. Atomic Integer int deger tutmak istedigimizde AtomicInteger sinifindaki volatile int value; degiskeni yardimi ile bellekteki son bilginin alinabilmesini saglar. Atomic Long long deger tutmak istedigimizde AtomicLong sinifindaki volatile long value; degiskeni yardimi ile bellekteki son bilginin alinabilmesini saglar. AtomicIntegerArray AtomicInteger listesi tutmak istedigimizde bu sinifi kullanabiliriz. AtomicLongArray AtomicLong listesi tutmak istedigimizde bu sinifi kullanabiliriz. Atomic Reference Obje tipinde deger tutmak istedigimizde AtomicReference sinifindaki volatile V value; degiskeni yardimi ile V degerine verilen obje tipinde bellekteki son bilginin alinabilmesini saglar. BURADAN ASAGISI EKSIKLER VAR Compare And Swap Concept CAS Elimizde is parcalari tarafindan paylasilan bir alan olsun. Bu alan uzerinde ayni anda birden fazla is parcasi calisiyor olsun. Eger is parcalarindan bir tanesi bu alanin degerini degitirirse diger is parcalarinin basarisiz olmasini herhangi bir lock mekanizmasi olmadan cozen konseptin ismidir. Eger paylasilan alan uzerinde islem yaptigimiz anda o alanin mevcut ve guncellemek istedigimiz bilgiyi ayni anda tutabilirsek; - mevcut ve alanin orijinal degeri ile karsilastiriyoruz. - eger yukaridaki adimda cevap esit ise mevcut deger guncellenen deger ile degisir. alan = 1 orijinal threadA calisti 1 degerini aldi 2 olarak guncellemek istiyor threadA guncelledi threadB calisti 1 degerini aldi 2 olarak guncellemek istiyor mevcut degere bakti 2 threadA degistirdi Thread paylasilan alan okundu orijinal degeri A, bunu guncelleyecek. Thread paylasilan alan okundu orijinal degeri B, bunu guncelleyerek A yapti. Ilk thread compare and swap yaptiginda hicbir sey degismemiz gibi oldugundan hata olusacak A-B-A Problem Compare And Swap Concept CAS veri yapisi dogru calismadigi durumda ortaya cikan probleme denir. Atomic Stamped Reference Atomic Reference tipinden tek farki hem objeyi hem damga degerinin tutuyor ConcurrencyAtomicStampedReferenceMain start - hazir run - calisiyor islem suresince - bloklanmis wait - bekleme modu sleep - uyku modu stop - artik yasamina devam etmiyor yield - calistiktan sonra hazir hale geri donmesi
Doğum sonrasında adet kanamasının başlaması doğum yapan annenin emzirmesi ile ilişkilidir. Normal ya da sezaryen doğum yapmış olmanın, annenin doğumdan sonra yeniden adet görmesi üzerinde özel bir rolü yoktur. Her iki doğum biçiminde de, eğer anne doğumdan sonra herhangi bir ek gıda vermeden bebeğini sadece emzirerek besliyorsa, ortalama üç buçuk dört ay sonra ilk adetini görür. Doğumdan sonra anne bebeğini emzirmiyorsa, adet kanaması ilk iki hafta içinde bile gerçekleşebilir. Bazı doğum sonrası vakalarda ise anneler 10 ayın sonuna kadar adet görmeyebilir. Doğum yapan anne 10 ayın sonunda hala adet görmemiş ve hamile değilse doktor kotrolünden geçmesi gerekir. Adetin yeniden başlaması ve düzenli hale gelmesi emzirme süresi ve sıklığı ile ilgilidir. Bunun nedeni ise emzirmenin devam etmesi ile prolaktin adı verilen süt hormonunun salgılanmasıdır. Prolaktin hormonu yumurta gelişimini sağlayan hormonal düzenin oluşmasını baskılar. Yumurtlama baskılandığında adet kanaması oluşmamaktadır. Zaman içinde emzirmenin azalması ile yumurtlama üzerindeki baskılama kalkar ve düzenli adet kanamaları başlar. ziyaretcimiz bu makaleyi faydalı buldu. Siz bu makaleyi faydalı buldunuz mu? Evet Hayır
Ölçme, Seçme ve Yerleştirme Merkezi tarafından 6 Eylül sabah Kamu Personeli Seçme Sınavı KPSS, öğlen Eğitim Bilimleri sınavı düzenlendi ve 20 Eylül'de ise Öğretmenlik Alan Bilgisi Testi ÖABT gerçekleştirildi. Uzun bir maratondan sonra sınav sonuçları 22 Ekim sabah saatleri itbari ile açıklandı ve adayların meraklı bekleyişi sona erdi. Peki yeni dönem öğretmen ataması ne zaman yapılacak? Öğretmen atamasına yönelik bir bilgi var mı, resmi olarak tarihte her hangi bir açıklama yapıldı mı? 5 Kasımda Mı Belli Olacak? Öğretmen atamasının 5 Kasımda olacağına yönelik internette asılsız haberler bulunmakta olup 5 Kasımda atama yapılmayacaktır. 5 Kasımda husus hakkında görüşmeler yapılacak olup Milli Eğitim Bakanlığı zaten düzenli olarak yaptığı görüşmelerde norm kadrolarını, öğretmen ihtiyaçlarını, Hazine ve Maliye Bakanlığından istenecek kadro sayısını düzenli olarak görüşmektedir. Peki yeni dönem atama ne zaman yapılacak? Ocak - Şubat Ayına Dikkat Milli Eğitim Bakanlığı öğretmen atamasında ilanı genel olarak Ocak ile Şubat ayında yayımlamaktadır. Yani bu aylar içerisinde yayımlanacak diye bir kural olmasa da genel olarak böyle bir izlenim olduğundan dolayı 2021 yılının Ocak ile Şubat ayında yeni bir ilanın gelmesinin çok muhtemel olduğu ön görülüyor. Ek Atama Olacak Mı? Öğretmen adaylarının en çok istedikleri konulardan bir tanesi ek atama hususudur. Bu konu hakkında Milli Eğitim Bakanlığı 2021 yılı için çalışmalarını sürdürüyor. Henüz çalışmalar net bir şekilde oturmadığı için resmi bilgi yok fakat 2020 yılında ek atamanın yapılması ve açıkların pandemi sürecinden dolayı artması sebebi ile 2021 yılında da ek atama olabilme ihtimali üzerinde durulmaktadır.
İşçilik alacakları içerisinde yer alan ücret yani maaş, fazla çalışma ücreti, ulusal bayram ücreti, hafta tatili ücreti, prim, ikramiye vb. ücret ekleri gibi işin görülmesiyle doğrudan ilgili olan alacak kalemleri için zamanaşımı süresi beş yıldır. Bu husus İş Kanunu “ Ücret alacaklarında zamanaşımı süresi beş yıldır.” şeklinde ifade edilmiştir. Beş yıllık zamanaşımı süresi, -sıklıkla karıştırıldığı gibi- iş sözleşmesinin sona erdiği tarihten itibaren değil her alacak için ne zaman muaccel olmuşsa o zamandan itibaren işlemeye başlayacaktır. Örneğin; Mart 2017 maaşı ödenmeyen işçinin Mart 2017 maaşı için zamanaşımı süresi Mart 2017 tarihinden itibaren; Nisan 2017 maaşı için ise Nisan 2017 tarihinden itibaren; 23 Nisan, 19 Mayıs gibi bir ulusal bayram gününde çalıştırılan işçinin çalıştırıldığı güne ilişkin ulusal bayram ücreti, çalıştırıldığı günden itibaren; fazla mesai yapmışsa fazla mesai yaptığı günden itibaren; her yıl belli bir günde verilen yılbaşı ikramiyesi o yılbaşı için verilmemişse verilmesi gereken o günden itibaren işlemeye başlar. Kısacası ilgili alacak, ne zaman ödenecekse o zamandan itibaren zamanaşımı işlemeye başlar. Ayrıca belirtelim ki, işçinin iş sözleşmesinin devam ediyor olması, yukarıda sayılan alacak kalemleri için zamanaşımının işlemesine engel olmaz. Bunun anlamı, iş sözleşmesi devam ederken ödenmeyen bir alacak kalemi için zamanaşımının dolma ihtimalinin bulunmasıdır. Bu gibi durumlara işçilerin dikkat etmesi gerekir. YILLIK İZİN ALACAKLARINDA ZAMANAŞIMI SÜRESİ İşçilerin yıllık ücretli izin alacaklarında zamanaşımı süresi ve sürenin işlemeye başlayacağı an bakımından farklı açıklamalar yapmak gerekecektir. Öncelikle sürenin ne zaman işlemeye başlayacağına ilişkin olarak İş Kanunu göre “ İş sözleşmesinin herhangi bir nedenle sona ermesi halinde işçinin hak kazanıp da kullanmadığı yıllık izin sürelerine ait ücreti, sözleşmenin sona erdiği tarihteki ücreti üzerinden kendisine veya hak sahiplerine ödenir. Bu ücrete ilişkin zamanaşımı, iş sözleşmesinin sona erdiği tarihten itibaren işlemeye başlar. “ Buna göre, yıllık ücretli izin alacağında zamanaşımı süresi, yukarıdaki alacaklardan farklı olarak iş sözleşmesinin sona erdiği tarihten itibaren işlemeye başlayacaktır. Yıllık ücretli izin alacağının zamanaşımı süresi konusunda ise işten çıkış tarihine göre farklı süreler uygulanacaktır. Buna göre; Türk Borçlar Kanunu TBK’ nun yürürlüğe girdiği tarihinden önce işten ayrılanlar için zamanaşımı süresi, 818 sayılı eski Borçlar Kanunu’nun 126/3 maddesi uyarınca 5 yıl olarak uygulanacaktır. Yeni TBK’nın yürürlüğe girdiği tarihinden sonra işten ayrılanlar için ise zamanaşımı süresi Yargıtay 9. HD’nin yerleşik uygulamasına göre 10 yıl olarak uygulanacaktır. 9. Daire, burada aksine hüküm bulunmadıkça tüm alacakların 10 yıllık zamanaşımı süresine tabi olduğuna ilişkin TBK 146 hükmünü kıstas olarak görmektedir. Ancak, tarihinde yürürlüğe giren 7036 sayılı Kanunla İş Kanunu’na ek 3. Madde eklenerek, yıllık ücretli izin alacağının beş yıl olacağı belirtilmiş ve yine aynı Kanunla eklenen ek 8. Maddeye göre de bu sürenin maddenin yürürlüğe girdiği tarihinden sonra işten çıkanlar için uygulanacağı belirtilmiştir. Buna göre yıllık ücretli izin alacaklarında zamanaşımı süresi tarihinden önce işten çıkanlar için 5 yıl, tarihleri arasında işten çıkanlar için 10 yıl, tarihinden sonra işten çıkanlar için 5 yıl olarak uygulanacak ve bu süreler, iş sözleşmesinin sona erdiği tarihten itibaren işlemeye başlayacaktır. KIDEM VE İHBAR TAZMİNATINDA ZAMANAŞIMI SÜRESİ İş sözleşmesinden kaynaklanan birtakım tazminatların kıdem tazminatı, ihbar tazminatı, kötüniyet tazminatı, denkleştirme tazminatı zamanaşımı süreleri için de 7036 sayılı Kanunla eklenen ek 3. ve ek 8. maddenin yürürlüğe girdiği tarihinden önce ve sonra iş sözleşmesi sona erenler için ayrı sonuçlara ulaşılacaktır. Söz konusu tazminatlar için İş Kanunu ek madde 3 ve ek madde 8 öncesinde zamanaşımı süreleri bakımından herhangi bir özel düzenleme bulunmuyordu. Bu nedenle, ek madde 3 ve ek madde 8’in yürürlüğe girdiği tarihinden önce iş sözleşmesi sona erenler için TBK 146’daki genel zamanaşımı süresi olan 10 yıllık zamanaşımı süresi uygulanacaktır. 10 yıllık süre, sözleşmenin sona erdiği tarihten itibaren işlemeye başlayacaktır. tarihinden sonra ise İş Kanunu ek madde 3’e göre söz konusu tazminatlar için zamanaşımı süresi 5 yıl olmuştur. Buna göre, tarihinden sonra iş sözleşmesi sona erenlerin tazminat alacakları için zamanaşımı süresi 5 yıldır ve bu süre yine iş sözleşmesinin sona erdiği tarihten itibaren işlemeye başlaycaktır. tarihinde yürürlüğe giren ek madde 3 ve ek madde 8 hükümlerinin yıllık ücretli izin alacakları ile kıdem, ihbar, kötüniyet ve denkleştirme tazminatları için uygulanacağını yukarıda belirttik. Ayrıca ek madde 8/2 hükmü uyarınca da “ Ek 3 üncü maddede belirtilen yıllık izin ücreti ve tazminatlar için bu maddenin yürürlüğe girmesinden önce işlemeye başlamış bulunan zamanaşımı süreleri, değişiklikten önceki hükümlere tabi olmaya devam eder. Ancak, zamanaşımı süresinin henüz dolmamış kısmı, ek 3 üncü maddede öngörülen süreden uzun ise, ek 3 üncü maddede öngörülen sürenin geçmesiyle zamanaşımı süresi dolmuş olur.” tarihinden önce işten ayrılanlar için yıllık izin ücreti ve tazminatlar için zamanaşımı süresinin 10 yıl olduğunu belirtmiştik. Ancak, bu kuralın yukarıda altı çizili hükümle beraber uygulanması gerekecektir. Hüküm, ilk bakışta biraz karışık gibi geldiği için konuyu örnek vererek açıklamak daha anlaşılır olacaktır. ÖRNEK VERMEK GEREKİRSE; tarihinden önce örneğin tarihinde işten ayrılan bir işçimiz olsun. Bu işçinin – hak kazanmışsa- yıllık izin ücreti ve kıdem, ihbar gibi yukarıda belirtilen tazminatları için iş sözleşmesinin sona erdiği tarihten itibaren 10 yıllık zamanaşımı süresinin uygulanması gerekir. Buna göre söz konusu alacaklar için zamanaşımının tarihinde dolması gerekecektir. Ancak, ek madde 8/2 hükmü bunu sınırlandırmaktadır. Buna göre, örneğimizdeki işçinin alacakları için belirttiğimiz zamanaşımı süresinin tarihinden sonraki kısmı dikkate alınmakta ve eğer bu kısım 5 yıldan uzunsa, bu kısım doğrudan 5 yıl olarak dikkate alınmaktadır. Bu nedenle, tarihine 5 yıl eklenerek tarihine ulaşılmakta ve örneğimizdeki işçinin alacakları için zamanaşımı süresinin tarihinde dolması gerekirken, ek madde 8/2 gereği tarihinde dolacaktır. Yukarıdaki açıklamalar dikkate alındığında işçilerin maaş vb. ücretleri için ayrı, yıllık izin ücretleri için ayrı, kıdem, ihbar, denkleştirme, kötü niyet tazminatları için ayrı zamanaşımı sürelerinin bulunduğu sonucuna ulaşılacaktır. Ücret alacaklarında zamanaşımı için yıllardır aynı kural uygulanmakta ancak yıllık izin ücreti ve tazminatlar için kural değişikliklerine gidilmiştir. Hal böyle olunca işçilerin söz konusu alacakları için zamanaşımı sürelerine dikkat etmeleri, gerektiğinde bu konuda uzman bir bürodan yardım almaları oldukça faydalı olacaktır. Av. Selçuk ENER
Soru Sınıf öğretmenliği kurumlararası nakile başvuracağım. Bursa merkezdeki okula atamam yapılınca doğu hizmetine ne zaman gönderilirim? Bursa merkezdeki okul 1. bölge okulu. İstanbul Fatihte 2. bölge okulu var. Oraya atanırsam kaç yıl sonra doğuya gönderilirim? Zorunlu hizmet var mı? 7 yıldır memurum öğretmenliğe geçince zorunlu hizmetten muaf olma imkanım var mı o haktan yararlanabilir miyim? Cevap Öncelikle şu hususu belirtmek gerekmektedir. Milli Eğitim Bakanlığında zorunlu hizmet uygulaması 2010 yılında değiştirilmiştir. Bölge esasından okul esasına geçilmiştir. Dolaysıyla doğu'ya ne zaman giderim sorusu artık bir anlam taşımamaktadır. Okullar hizmet alanlarına göre 6 sınıfa ayrılmış ve bu alanlardan 4, 5 ve 6. alanlar zorunlu hizmet yerleri olarak belirlenmiştir. adresinden yapacağınız sorgulamada, çıkan okul isimlerine tıkladığınızda, her bir okulun zorunlu hizmete tabi olup olmadığını görebilirsiniz. Eğer, tercih edeceğiniz okul 1, 2 ve 3. alan olarak belirlenmişse, 15 Eylül itibariyle atandığınız okulda 3 yıllık görev yapmanızın ardından, alanı 4, 5 ve 6. olarak belirlenmiş okullara, zorunlu çalışma yükümlülüğüne bağlı yer değiştirmeniz yapılacaktır. Yani, tercih edeceğiniz okul; 4, 5 ve 6'da ise zorunlu hizmetinizi zaten yapmış sayılmacaksınız. Tercih edeceğiniz okul 1, 2 ve 3. alanda ise 3 yıl sonra zorunlu hizmet öngörülen okullara nakil isteyeceksiniz. Ancak zorunlu hizmet artık sadece "Doğu" demek değildir. Her ilde veya her ilin bazı ilçelerinde zorunlu hizmete tabi okullar bulunmaktadır. Bunlar, sayfalarında tek tek gösterilmiştir. Diğer taraftan, diğer kurumlardaki hizmet süresinin MEB'le bir ilgisi bulunmamaktadır. tarihinden sonra her ne sebeble olursa olsun öğretmenliğe atananlar zorunlu hizmete tabidirler. Bu soru 23,397 defa okundu. 6 Yorum yapıldı
atandiktan sonra ne zaman ise baslanir