<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>Kodcu.Net - RSS</title>
<description>Kodcu.Net ve Java</description>
<link>http://www.kodcu.net/</link>
<language>tr-tr</language>


<item>
<title>Nesne Sıralama</title>
<author>admin</author>
<description>&lt;strong&gt;Sayı&lt;/strong&gt;ları, &lt;strong&gt;string&lt;/strong&gt;leri, &lt;strong&gt;karakter&lt;/strong&gt;leri büyüklük ve küçüklük olarak karşılaştırıp sıralama yapabiliyoruz. Peki nesneleri birbirleriyle nasıl karşılaştıracağız ve neye göre sıralayacağız?

Öncelikle nesneleri neden sıralamak isteriz, bu ihtiyacımıza değinelim.

Daha önce nesnelerin dizi gibi saklanması ile ilgili &lt;a href=&quot;http://www.kodcu.net/javase/java.util.ArrayList&quot;&gt;ArrayList&lt;/a&gt; sınıfından &lt;a href=&quot;http://www.kodcu.net/yazi/arraylist-kullanimi&quot;&gt;şurada&lt;/a&gt; bahsetmiştik. Bu sınıf vasıtasıyla dinamik bir şekilde dizinin boyutuyla ilgilenmeden yeni nesneler ekleyip, nesneler çıkarabiliyoruz. Sakladığımız nesneleri sıralı bir hale getirmek ve o sırada dizinin içinde okuma yapmak isteyebiliriz. Burada karşımıza Collections sınıfının sort metodu çıkıyor. Bu metod arraylist objesi haricinde bir de &lt;a href=&quot;http://www.kodcu.net/javase/java.util.Comparator&quot;&gt;Comparator&lt;/a&gt; nesnesi alıyor. Comparator sınıfı compare methoduna sahiptir.

Şimdi örneğimize bakalım:

&lt;strong&gt;Author.java:&lt;/strong&gt;
&lt;kod&gt;class Author {
  private &lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt; firstName;
  private &lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt; lastName;
 
  public Author(){
  }
  public Author(&lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt; firstName, &lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt; lastName){
    this.firstName = firstName;
    this.lastName = lastName;
  }
 
  /**
    * @return Returns the firstName.
    */
  public &lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt; getFirstName() {
    return firstName;
  }
  /**
    * @param firstName The firstName to set.
    */
  public void setFirstName(&lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt; firstName) {
    this.firstName = firstName;
  }
  /**
    * @return Returns the lastName.
    */
  public &lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt; getLastName() {
    return lastName;
  }
  /**
    * @param lastName The lastName to set.
    */
  public void setLastName(&lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt; lastName) {
    this.lastName = lastName;
  }
 
  public &lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt; toString(){
    return (this.firstName + &quot; &quot; + this.lastName);
  }
}&lt;/kod&gt;
&lt;strong&gt;Main.java:&lt;/strong&gt;
&lt;kod&gt;import &lt;a href=&quot;http://java.util.kodcu.net/&quot;&gt;java.util&lt;/a&gt;.*;

public class Main {

  /**
    * @param args
    */
  public static void main(&lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt;[] args) {

    Author author1 = new Author(&quot;Bekir&quot;, &quot;Coşkun&quot;);
    Author author2  = new Author(&quot;Yılmaz&quot;, &quot;Özdil&quot;);
    Author author3 = new Author(&quot;Emin&quot;,&quot;Çölaşan&quot;);
    Author author4 = new Author(&quot;Saygı&quot;,&quot;Öztürk&quot;);
 
    &lt;a href=&quot;http://java.util.arraylist.kodcu.net/&quot;&gt;ArrayList&lt;/a&gt; authorList = new &lt;a href=&quot;http://java.util.arraylist.kodcu.net/&quot;&gt;ArrayList&lt;/a&gt;();
    authorList.add(author1);
    authorList.add(author2);
    authorList.add(author3);
    authorList.add(author4);
 
    &lt;a href=&quot;http://java.util.collections.kodcu.net/&quot;&gt;Collections&lt;/a&gt;.sort(authorList, new &lt;a href=&quot;http://java.util.comparator.kodcu.net/&quot;&gt;Comparator&lt;/a&gt;(){
 
        public int compare(&lt;a href=&quot;http://java.lang.object.kodcu.net/&quot;&gt;Object&lt;/a&gt; o1, &lt;a href=&quot;http://java.lang.object.kodcu.net/&quot;&gt;Object&lt;/a&gt; o2) {
            Author a1 = (Author) o1;
            Author a2 = (Author) o2;
            return a1.getFirstName().compareToIgnoreCase(a2.getFirstName());
        }
 
    });
 
    &lt;a href=&quot;http://java.lang.system.kodcu.net/&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://java.io.printstream.kodcu.net/&quot;&gt;out&lt;/a&gt;.println(authorList);
		
  }
}
&lt;/kod&gt;</description>
<pubDate>Tue, 13 Sep 2011 20:31:00 GMT</pubDate>
<link>http://www.kodcu.net/yazi/nesne-siralama</link>
</item><item>
<title>Java'da Reflection Kullanımı</title>
<author>admin</author>
<description>Java sınıfların, metotların, metotların aldıkları değer tiplerinin isimlerini çalışma zamanında (runtime) alabilmemizi sağlamaktadır. Bunun için &lt;a href=&quot;http://java.lang.reflect.kodcu.net/&quot;&gt;reflect&lt;/a&gt; paketi &lt;strong&gt;import&lt;/strong&gt; edilir. Bu işlemlere &lt;strong&gt;reflection&lt;/strong&gt; denir.

&lt;strong&gt;Peki java reflection ne işe yarar?&lt;/strong&gt;
Yansıtma kütüphanesine geliştirme araçları yazarken ihtiyaç duyabiliriz. Çalışma zamanında bize &lt;strong&gt;string&lt;/strong&gt; olarak gelen bir değerin sınıf olarak düşünülüp nesnesinin üretilmesi gerekebilir. İşte derleme (compile) sırasında değil de çalışma (runtime) sırasında sınıf(lar)ın nesnesinin üretilmesine, onların metotlarına, tiplerine, paketlerine erişmeye yansıtma diyoruz. 

Eğer derleyici yazalım dersek girilen text kodun ayrıştırılıp (parse) yazım incelemesi (syntax) yapıldıktan sonra, kodun içinde geçen nesnelerin üretilmesi ve metotların çağrılması için böyle bir mekanizmaya ihtiyaç duyarız.

Örnek bir koda bakalım:
&lt;kod&gt;package kodcu.net;

import &lt;a href=&quot;http://java.lang.reflect.kodcu.net/&quot;&gt;java.lang.reflect&lt;/a&gt;.*;

public class Main {

  public static void main(&lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt;[] args) {

    // Select a class
    &lt;a href=&quot;http://java.lang.class.kodcu.net/&quot;&gt;Class&lt;/a&gt; cls = &lt;a href=&quot;http://java.lang.string.kodcu.net/&quot;&gt;String&lt;/a&gt;.class;
    
    // Get methods of the class
    &lt;a href=&quot;http://java.lang.reflect.method.kodcu.net/&quot;&gt;Method&lt;/a&gt;[] methodList = cls.getDeclaredMethods();

    for (int i = 0; i &lt; methodList.length; i++) {
      &lt;a href=&quot;http://java.lang.reflect.method.kodcu.net/&quot;&gt;Method&lt;/a&gt; m = methodList[i];
      &lt;a href=&quot;http://java.lang.system.kodcu.net/&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://java.io.printstream.kodcu.net/&quot;&gt;out&lt;/a&gt;.println(&quot;Method Name: &quot; + m.getName());
      
      &lt;a href=&quot;http://java.lang.class.kodcu.net/&quot;&gt;Class&lt;/a&gt;[] parameterTypes = m.getParameterTypes();
      for (int j = 0; j &lt; parameterTypes.length; j++) {
        &lt;a href=&quot;http://java.lang.system.kodcu.net/&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://java.io.printstream.kodcu.net/&quot;&gt;out&lt;/a&gt;.println(&quot;  Parameter Type: &quot; + parameterTypes[j].getName());
      }
      
      &lt;a href=&quot;http://java.lang.system.kodcu.net/&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://java.io.printstream.kodcu.net/&quot;&gt;out&lt;/a&gt;.println();
    }
    
  }

}
&lt;/kod&gt;</description>
<pubDate>Fri, 18 Sep 2009 22:05:34 GMT</pubDate>
<link>http://www.kodcu.net/yazi/javada-reflection-kullanimi</link>
</item><item>
<title>Ondalıklı Sayılarda Son Basamak</title>
<author>admin</author>
<description>Ondalıklı sayılarda virgülden sonraki kısıma dikkat etmek gerekmektedir. &lt;strong&gt;double&lt;/strong&gt; işlemlerde burada karşılaşılabilecek hatalardan dolayı bölme ve çarpma işlemlerinde öncelik çarpmaya verilmelidir. Böylece hata payı küçülmektedir.

Şimdi ondalıklı sayılardaki önceki en büyük ondalıklı sayıya ve sonraki en küçük ondalıklı sayıya bakalım:

&lt;kod&gt;package kodcu.net;

import java.text.ChoiceFormat;

public class Main {

  public static void main(&lt;a href=&quot;http://java.lang.string.kodcu.net&quot;&gt;String&lt;/a&gt;[] args) {
    double d = 1.3;
    
        // Largest double before d
        double d1 = &lt;a href=&quot;http://java.text.choiceformat.kodcu.net/&quot;&gt;ChoiceFormat&lt;/a&gt;.previousDouble(d); 
        &lt;a href=&quot;http://java.lang.system.kodcu.net&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://java.io.printstream.kodcu.net/&quot;&gt;out&lt;/a&gt;.println(d1);
        // Smallest double after d
        double d2 = &lt;a href=&quot;http://java.text.choiceformat.kodcu.net/&quot;&gt;ChoiceFormat&lt;/a&gt;.nextDouble(d);
        &lt;a href=&quot;http://java.lang.system.kodcu.net&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://java.io.printstream.kodcu.net/&quot;&gt;out&lt;/a&gt;.println(d2);
  }

}
&lt;/kod&gt; 
Çıktı şu şekildedir:
&lt;kod&gt;1.2999999999999998
1.3000000000000003&lt;/kod&gt;</description>
<pubDate>Thu, 02 Jul 2009 21:09:17 GMT</pubDate>
<link>http://www.kodcu.net/yazi/ondalikli-sayilarda-son-basamak</link>
</item><item>
<title>Programı Sonlandırma</title>
<author>admin</author>
<description>Uygulamanın herhangi bir yerinde uygulamayı sonlandırmak istersek &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt; sınıfının &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System#exit(int)&quot;&gt;exit&lt;/a&gt; metodunu kullanabiliriz.

&lt;kod&gt;package kodcu.net;

public class Main {

  public static void main(&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;[] args) {
    int exitCode = -1;
    // return exitCode
    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.exit(exitCode);
  }

}&lt;/kod&gt;
Bu metot çağırısı ile o an çalışmakta olan &lt;a href=&quot;http://www.kodcu.net/yazi/java-terimlerine-bir-bakis&quot;&gt;Java Virtual Machine&lt;/a&gt; sonlandırılır. Sıfırdan farklı bir sayı dönerse uygulamadan, normal olmayan bir sonlanma bildirilmektedir.</description>
<pubDate>Mon, 22 Jun 2009 07:56:43 GMT</pubDate>
<link>http://www.kodcu.net/yazi/programi-sonlandirma</link>
</item><item>
<title>String'i Bölme, Split Etme</title>
<author>admin</author>
<description>&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String#split(java.lang.String)&quot;&gt;split()&lt;/a&gt; metodu, &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;'leri belirli ifadelere göre parçalamayı sağlar.

Şu örnekte verilen yazıyı boşluğa göre ayrıştıralım:
&lt;kod&gt;package kodcu.net;

public class Main {

  public static void main(&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;[] args) {
    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt; str = &quot;www kodcu net&quot;;
    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.println(str);
    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;[] str2 = str.split(&quot; &quot;);
    for (int i = 0; i &lt; str2.length; i++) {
      &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.println(str2[i]);
    }
  }
}
&lt;/kod&gt;
Çıktımız şu şekilde:
&lt;kod&gt;www kodcu net
www
kodcu
net
&lt;/kod&gt;
Görüldüğü gibi ilk ifade boşluğa göre parçalandı.

Neye göre ayrıştırma yapılacağını bir &lt;a href=&quot;http://en.wikipedia.org/wiki/Regular_expression&quot;&gt;RegEx&lt;/a&gt; &lt;a href=&quot;http://www.regular-expressions.info/&quot;&gt;ifadesi&lt;/a&gt; olarak belirtiriz.

Kaça kadar ayırştırma yapılacağını ise aynı metotta ikinci parametre olarak verebiliriz. Yazdığımız kodda şöyle bir değişiklik yaparsak:
&lt;kod&gt;    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;[] str2 = str.split(&quot; &quot;,2);&lt;/kod&gt;
Şu sonucu alırız:
&lt;kod&gt;www kodcu net
www
kodcu net
&lt;/kod&gt;
Görüldüğü gibi yine ilk yazı ayrıştırılmasını istediğimiz yazı. Bu yazı, boşluğa göre 2 parça olacak şekilde ayrıştırma yapılmıştır.</description>
<pubDate>Sat, 20 Jun 2009 13:57:44 GMT</pubDate>
<link>http://www.kodcu.net/yazi/stringi-bolme-split-etme</link>
</item><item>
<title>Timestamp'i Formatlı Halde String'e Çevirmek</title>
<author>admin</author>
<description>Daha önce &lt;a href=&quot;http://www.kodcu.net/yazi/timestamp-sinifi-ve-kullanimi&quot;&gt;Timestamp sınıfı ve kullanımı&lt;/a&gt;ndan bahsetmiştik. Çokça ihtiyaç duyulan tarhisel işlemlerden birisi olan tarihsel veri içeren &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;'in &lt;a href=&quot;http://www.kodcu.net/javase/java.sql.Timestamp&quot;&gt;Timestamp&lt;/a&gt; hale dönüştürülmesinden &lt;a href=&quot;http://www.kodcu.net/yazi/simpledateformat-sinifi-ve-tarih-formatlama&quot;&gt;şurada&lt;/a&gt; bahsetmiştik. Bunun tam tersi de yine ihtiyaç duyulan işlemlerden birisi. Şimdi &lt;strong&gt;Timestamp&lt;/strong&gt; verinin belirli bir formatta istediğimiz &lt;strong&gt;String&lt;/strong&gt; hale dönüştürülmesine bakalım:

&lt;kod&gt;package kodcu.net;

import &lt;a href=&quot;http://www.kodcu.net/javase/java.text.SimpleDateFormat&quot;&gt;java.text.SimpleDateFormat&lt;/a&gt;;
import &lt;a href=&quot;http://www.kodcu.net/javase/java.util.Date&quot;&gt;java.util.Date&lt;/a&gt;;
import &lt;a href=&quot;http://www.kodcu.net/javase/java.sql.Timestamp&quot;&gt;java.sql.Timestamp&lt;/a&gt;;

public class Main {

  // Constructor
  public Main() {}

  public static void main(&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;[] args) throws Exception {
    
    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt; pattern = &quot;dd/MM/yyyy HH:mm&quot;;
    
    &lt;a href=&quot;http://www.kodcu.net/javase/java.util.Date&quot;&gt;Date&lt;/a&gt; dt = new &lt;a href=&quot;http://www.kodcu.net/javase/java.util.Date&quot;&gt;Date&lt;/a&gt;();
    &lt;a href=&quot;http://www.kodcu.net/javase/java.sql.Timestamp&quot;&gt;Timestamp&lt;/a&gt; ts = new &lt;a href=&quot;http://www.kodcu.net/javase/java.sql.Timestamp&quot;&gt;Timestamp&lt;/a&gt;(dt.getTime());
    
    &lt;a href=&quot;http://www.kodcu.net/javase/java.text.SimpleDateFormat&quot;&gt;SimpleDateFormat&lt;/a&gt; formatter = new &lt;a href=&quot;http://www.kodcu.net/javase/java.text.SimpleDateFormat&quot;&gt;SimpleDateFormat&lt;/a&gt;(pattern);
    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt; strDate = formatter.format(new &lt;a href=&quot;http://www.kodcu.net/javase/java.util.Date&quot;&gt;Date&lt;/a&gt;(ts.getTime()));
    
    // This is timestamp
    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.println(ts);
    // This is formatted date
    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.println(strDate);

  }

}
&lt;/kod&gt;
Ekran çıktısı şu şekildedir:
&lt;kod&gt;2009-05-20 16:44:52.0
20/05/2009 16:44
&lt;/kod&gt;
Birinci veri &lt;strong&gt;timestamp&lt;/strong&gt;, ikincisi ise bizim formatlı tarihimiz.</description>
<pubDate>Wed, 20 May 2009 13:49:26 GMT</pubDate>
<link>http://www.kodcu.net/yazi/timestampi-formatli-halde-stringe-cevirmek</link>
</item><item>
<title>Hex String Integer Dönüşümleri</title>
<author>admin</author>
<description>&lt;strong&gt;Hex String - Integer&lt;/strong&gt; dönüşümlerine yerine göre ihtiyaç duyabiliriz. Bununla ilgili şu örneğe bakabilirsiniz:

&lt;kod&gt;package kodcu.net;

import &lt;a href=&quot;http://www.kodcu.net/javase/java.awt.Color&quot;&gt;java.awt.Color&lt;/a&gt;;

public class Main {

  // Constructor
  public Main() {}

  public static void main(&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;[] args) throws Exception {

   &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt; strHex = &quot;FFFFFF&quot;;
   int intValue = &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Integer&quot;&gt;Integer&lt;/a&gt;.parseInt(strHex, 16);
   &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.println(&quot;This is integer value: &quot; + intValue);
   strHex = &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Integer&quot;&gt;Integer&lt;/a&gt;.toHexString(intValue);
   &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.println(&quot;This is hex string: &quot; + strHex);   
   
   &lt;a href=&quot;http://www.kodcu.net/javase/java.awt.Color&quot;&gt;Color&lt;/a&gt; color = new &lt;a href=&quot;http://www.kodcu.net/javase/java.awt.Color&quot;&gt;Color&lt;/a&gt;(intValue);
   // Color color = new Color(0xFFFFFF);
   int red = color.getRed();
   int green = color.getGreen();
   int blue = color.getBlue();
   &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.println(&quot;RGB: &quot; + red + &quot; &quot; + green + &quot; &quot; + blue);   
   
  }

}&lt;/kod&gt;
Burada &lt;a href=&quot;http://www.kodcu.net/javase/java.awt&quot;&gt;awt&lt;/a&gt; çatısı kullanılmıştır ve &lt;a href=&quot;http://www.kodcu.net/javase/java.awt.Color&quot;&gt;Color&lt;/a&gt; sınıfının nesnesi rengimiz oluşturulurken integer değer verilmiştir. Bu değere göre kırmızı (red), yeşil (green) ve mavi (blue) &lt;strong&gt;RGB&lt;/strong&gt; değerleri elde edilmiştir.

Ekran çıktısı şu şekildedir:
&lt;kod&gt;This is integer value: 16777215
This is hex string: ffffff
RGB: 255 255 255
&lt;/kod&gt;</description>
<pubDate>Sun, 17 May 2009 14:23:32 GMT</pubDate>
<link>http://www.kodcu.net/yazi/hex-string-integer-donusumleri</link>
</item><item>
<title>Thread Sınıfı ve Kullanımı</title>
<author>admin</author>
<description>&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread&quot;&gt;Thread&lt;/a&gt;'ler &lt;strong&gt;çok kanallı programlama&lt;/strong&gt; (&lt;strong&gt;multiprogramming, multitasking&lt;/strong&gt;) için önemli bir mekanizmadır. Java'nın da desteklediği bu sınıf aynı anda birden fazla iş yapabilmemizi ya da başka değişle farklı iş parçacıklarının aynı zamanda çalışmasını sağlamaktadır.

&lt;strong&gt;Thread&lt;/strong&gt;'ler &lt;strong&gt;process&lt;/strong&gt;'lerle karıştırılmamalıdır. Bir &lt;strong&gt;process&lt;/strong&gt;'te birden fazla &lt;strong&gt;thread&lt;/strong&gt; çalışırken ve bunların çalışmaları programlanırken (&lt;strong&gt;scheduling&lt;/strong&gt;) işletim sistemine göre aynı anda birden fazla process çalışmayabilir (&lt;strong&gt;multiprocessing&lt;/strong&gt;). Bu o işletim sisteminin yeteneği ile ve &lt;strong&gt;CPU&lt;/strong&gt; (işlemci) sayısının birden fazla olması ile ilgilidir.

Şimdi bu sınıfın kullanımına bakalım. Kendi &lt;strong&gt;thread&lt;/strong&gt; sınıflarımızı oluşturmak için sınıf oluşturduktan sonra &lt;strong&gt;Thread&lt;/strong&gt; sınıfını genişletiriz (&lt;strong&gt;extend&lt;/strong&gt;). Yapcağımız işlemleri kendi sınıfımızda &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#run()&quot;&gt;run()&lt;/a&gt; metodu oluşturarak içinde yaparız. Bu kanal çalıştırılacağı zaman &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#start()&quot;&gt;start()&lt;/a&gt; metodu çağırılır.

Şu örneğe bakalım:

Main.java:
&lt;kod&gt;package kodcu.net;

public class Main {

  // Constructor
  public Main() {}

  public static void main(&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.lang.String&quot;&gt;String&lt;/a&gt;[] args) {

    ThreadDemo td1 = new ThreadDemo(1);
    ThreadDemo td2 = new ThreadDemo(2);
    ThreadDemo td3 = new ThreadDemo(3);
    
    td1.start();
    td2.start();
    td3.start();
    
   }

}
&lt;/kod&gt;
ThreadDemo.java:
&lt;kod&gt;package kodcu.net;

public class ThreadDemo extends &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread&quot;&gt;Thread&lt;/a&gt; {
  private int id;
  public ThreadDemo(int id) {
    this.id = id;
  }

  public void run() {
    
    for (int i = 0; i &lt; 10; i++) {
      &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.println(&quot;Thread ID: &quot; + id + &quot; Number: &quot; + i);
    }

  }
}
&lt;/kod&gt;
Ekran çıktısı şu şekildedir:
&lt;kod&gt;Thread ID: 2 Number: 0
Thread ID: 2 Number: 1
Thread ID: 2 Number: 2
Thread ID: 2 Number: 3
Thread ID: 2 Number: 4
Thread ID: 2 Number: 5
Thread ID: 2 Number: 6
Thread ID: 2 Number: 7
Thread ID: 2 Number: 8
Thread ID: 2 Number: 9
Thread ID: 1 Number: 0
Thread ID: 1 Number: 1
Thread ID: 1 Number: 2
Thread ID: 3 Number: 0
Thread ID: 1 Number: 3
Thread ID: 3 Number: 1
Thread ID: 1 Number: 4
Thread ID: 3 Number: 2
Thread ID: 1 Number: 5
Thread ID: 3 Number: 3
Thread ID: 1 Number: 6
Thread ID: 3 Number: 4
Thread ID: 1 Number: 7
Thread ID: 1 Number: 8
Thread ID: 1 Number: 9
Thread ID: 3 Number: 5
Thread ID: 3 Number: 6
Thread ID: 3 Number: 7
Thread ID: 3 Number: 8
Thread ID: 3 Number: 9&lt;/kod&gt;
Görüldüğü gibi kanal kendi içerisinde sıralı çalışırken hangi kanalın önce davranacağı konusu belirli değildir. Kanalların aynı anda çalışma mantığı bunu gerektirir. Önemli olan verilen zaman içerisinde bu kanalların birlikte koşmasıdır (run).

Bir kanalın ayakta olup olmadığını &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#isAlive()&quot;&gt;isAlive()&lt;/a&gt; metodu ile öğrenmekteyiz. Kanalın uyumasını &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#sleep(long)&quot;&gt;sleep(long)&lt;/a&gt; metodu ile sağlarız. Kanal içerisinde de &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#sleep(long)&quot;&gt;Thread.sleep(long)&lt;/a&gt; metodu ile sağlayabiliriz.

Kanalı oluşturup istediğimiz zaman çalışmasını istersek şöyle bir yol izleyebiliriz. Burada kanala yapılan metod çağrılarında sıralı işlem yapılması için &lt;a href=&quot;http://www.kodcu.net/yazi/synchronized-anahtar-sozcugu-ve-blogu-keyword&quot;&gt;synchronized&lt;/a&gt; anahtar kelimesini (keyword) kullanacağız.

&lt;kod&gt;    public synchronized void run() {
        while (true) {
            try {
                wait();
            } catch (&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.InterruptedException&quot;&gt;InterruptedException&lt;/a&gt; ie) {
                // ie
                //System.out.println(&quot;InterruptedException&quot;);
            }
            connect();
        }
    }
    
    public synchronized void go() {
        notify();
    }

    private void connect() {
        // işlemler
    }
&lt;/kod&gt;
Burada da &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Object#wait()&quot;&gt;wait()&lt;/a&gt; metodu ve &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Object#notify()&quot;&gt;notify()&lt;/a&gt; metodunu görüyoruz. Bu metotlar &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Object&quot;&gt;Object&lt;/a&gt; sınıfının metotlarıdır ve kanalı &lt;strong&gt;wait()&lt;/strong&gt; ile beklemeye alırız &lt;strong&gt;notify()&lt;/strong&gt; ile uyandırırız.

Kanalların çalışma anları için öncelik verebiliriz. Bunu da &lt;strong&gt;Thread&lt;/strong&gt; sınıfının &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#setPriority(int)&quot;&gt;setPriority(int)&lt;/a&gt; metodu ile sağlarız. Öncelik değerleri 0-10 arasındadır ve bunla ilgili tanımlı bazı sabitler şunlar:
&lt;kod&gt;Thread.MIN_PRIORITY =1
Thread.NORM_PRIORITY =5
Thread.MAX_PRIORITY=10&lt;/kod&gt;
Çok fazla kanalla çalışırken boşta duran kanalın işgalini önlemek için &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#yield()&quot;&gt;yield()&lt;/a&gt; metodunu kullanmaktayız. Bekleme sırasında yüksek veya eşit önceliğe sahip kanalların çalışmasına izin verir.

&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#join()&quot;&gt;join()&lt;/a&gt; metodu, kanalın belirli süre veya ölene kadar beklemesini sağlar.

&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#interrupt()&quot;&gt;interrupt()&lt;/a&gt; metodu &lt;strong&gt;wait&lt;/strong&gt; halindeki veya &lt;strong&gt;sleep&lt;/strong&gt; halinde de olabilen kanalın uyandırılmasını (kesme işlemini) sağlamaktadır. Kanalın kesme durumunda olup olmadığı da &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#isInterrupted()&quot;&gt;isInterrupted()&lt;/a&gt; metodu ile öğrenilmektedir.

Kanalı öldürmek için &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#stop()&quot;&gt;stop()&lt;/a&gt; veya &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Thread#destroy()&quot;&gt;destroy()&lt;/a&gt; metotları kullanılmaktadır.</description>
<pubDate>Fri, 15 May 2009 14:04:37 GMT</pubDate>
<link>http://www.kodcu.net/yazi/thread-sinifi-ve-kullanimi</link>
</item><item>
<title>Properties Sınıfı ve Kullanımı</title>
<author>admin</author>
<description>&lt;a href=&quot;http://www.kodcu.net/javase/java.util.Properties&quot;&gt;Properties&lt;/a&gt; sınıfı &lt;a href=&quot;http://www.kodcu.net/javase/java.util&quot;&gt;java.util&lt;/a&gt; çatısı altında yer alan bir sınıftır. Belirli &lt;strong&gt;anahtar&lt;/strong&gt;lara (&lt;strong&gt;keys&lt;/strong&gt;) karşılık belirli &lt;strong&gt;değer&lt;/strong&gt;lerin (&lt;strong&gt;values&lt;/strong&gt;) eşleşmesini sağlamaktadır. Bu eşleşme daha önce &lt;a href=&quot;http://www.kodcu.net/yazi/hashtable-kullanimi&quot;&gt;şu yazıda&lt;/a&gt; bahsettiğimiz &lt;a href=&quot;http://www.kodcu.net/javase/java.util.Hashtable&quot;&gt;Hashtable&lt;/a&gt; sınıfındaki anahtar-değer (key-value) eşleşmesine benzemektedir.

&lt;strong&gt;Peki Hashtable ile Properties sınıflarının farkı nedir?&lt;/strong&gt;

&lt;strong&gt;Hashtable&lt;/strong&gt;'da anahtar ve değer çiftimiz &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.Object&quot;&gt;Object&lt;/a&gt; tipinde iken &lt;strong&gt;Properties&lt;/strong&gt; sınıfında anahtar ve değer çiftimiz &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt; tipindedir. Örnek olarak &lt;strong&gt;Hashtable&lt;/strong&gt;'da bir &lt;strong&gt;string&lt;/strong&gt; değerine karşılık bir nesne ekleyebiliyorken &lt;strong&gt;Properties&lt;/strong&gt;'te &lt;strong&gt;string&lt;/strong&gt;'e karşılık sadece &lt;strong&gt;string&lt;/strong&gt; tutabiliyoruz.

Bundan anlaşıldığı gibi &lt;strong&gt;Properties&lt;/strong&gt; sınıfı daha özel bir sınıftır ve &lt;strong&gt;Hashtable&lt;/strong&gt;'ı bu amaçla genişletir (&lt;strong&gt;extend&lt;/strong&gt;).

&lt;strong&gt;Properties&lt;/strong&gt; kullanımına yönelik şu örneğe bakalım:

&lt;kod&gt;package kodcu.net;

import &lt;a href=&quot;http://www.kodcu.net/javase/java.util.Properties&quot;&gt;java.util.Properties&lt;/a&gt;;

public class Main {

  // Constructor
  public Main() {}

  public static void main(&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;[] args) {
    &lt;a href=&quot;http://www.kodcu.net/javase/java.util.Properties&quot;&gt;Properties&lt;/a&gt; dbFieldProp = new &lt;a href=&quot;http://www.kodcu.net/javase/java.util.Properties&quot;&gt;Properties&lt;/a&gt;();
    dbFieldProp.put(&quot;id&quot;, &quot;USER_ID&quot;);
    dbFieldProp.put(&quot;username&quot;, &quot;USER_NAME&quot;);
    dbFieldProp.put(&quot;password&quot;, &quot;USER_PASSWORD&quot;);
    dbFieldProp.put(&quot;email&quot;, &quot;USER_EMAIL&quot;);

    &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.println(dbFieldProp.getProperty(&quot;email&quot;));
  }

}
&lt;/kod&gt;
Programın çıktısı şu şekildedir:
&lt;kod&gt;USER_EMAIL&lt;/kod&gt;
&lt;a href=&quot;http://www.kodcu.net/javase/java.util.Properties#getProperty(java.lang.String)&quot;&gt;getProperty()&lt;/a&gt; metodu ile değer okuması yapılmaktadır.

Örnekte veritabanı alanları değerler olarak düşünülmüştür ve bunlara erişmede kullanılacak kelimeler de anahtar kelimelerdir.</description>
<pubDate>Tue, 05 May 2009 19:32:32 GMT</pubDate>
<link>http://www.kodcu.net/yazi/properties-sinifi-ve-kullanimi</link>
</item><item>
<title>Dosyadan Tamponlu Okuma Yapma</title>
<author>admin</author>
<description>Karakter karakter veya satır satır okuma ile ilgili daha önce &lt;a href=&quot;http://www.kodcu.net/yazi/dosyadan-karakter-okumak&quot;&gt;burada&lt;/a&gt; ve &lt;a href=&quot;http://www.kodcu.net/yazi/dosyadan-satir-okuyup-dosyaya-satir-yazdirmak&quot;&gt;şurada&lt;/a&gt; değinmiştik.

Bunların dışında tamponlu yani buffer kullanarak okuma nasıl yapılır ona bakalım. 

Tamponlu okumada bir &lt;strong&gt;byte&lt;/strong&gt; dizimiz mevcuttur ve her okuma anında bu &lt;strong&gt;byte&lt;/strong&gt; dizisi kadar veri okunur.

Örnek:
&lt;kod&gt;package kodcu.net;

import java.io.*;

public class Main {

  public static final int BUFFER_SIZE = 20;

  public static void main(&lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;[] args) {

    try {
      &lt;a href=&quot;http://www.kodcu.net/javase/java.io.File&quot;&gt;File&lt;/a&gt; file = new &lt;a href=&quot;http://www.kodcu.net/javase/java.io.File&quot;&gt;File&lt;/a&gt;(&quot;C://kodcu.txt&quot;);
      &lt;a href=&quot;http://www.kodcu.net/javase/java.io.FileInputStream&quot;&gt;FileInputStream&lt;/a&gt; fis = new &lt;a href=&quot;http://www.kodcu.net/javase/java.io.FileInputStream&quot;&gt;FileInputStream&lt;/a&gt;(file);
      int c;

      byte[] dizi = new byte[BUFFER_SIZE];
      int len = 0;
      while ((len = fis.read(dizi, 0, BUFFER_SIZE)) == BUFFER_SIZE) {
        &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.print(new &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;(dizi));
      }
      if (len != -1) {
        byte[] kalan = new byte[len];
        for (int i = 0; i &lt; len; i++) {
          kalan[i] = dizi[i]; // last part
        }
        &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.System&quot;&gt;System&lt;/a&gt;.&lt;a href=&quot;http://www.kodcu.net/javase/java.io.PrintStream&quot;&gt;out&lt;/a&gt;.print(new &lt;a href=&quot;http://www.kodcu.net/javase/java.lang.String&quot;&gt;String&lt;/a&gt;(kalan));
      }

      fis.close();
    }
    catch (&lt;a href=&quot;http://www.kodcu.net/javase/java.io.FileNotFoundException&quot;&gt;FileNotFoundException&lt;/a&gt; fnfe) { }
    catch (&lt;a href=&quot;http://www.kodcu.net/javase/java.io.IOException&quot;&gt;IOException&lt;/a&gt; ioe) { }
  }

}
&lt;/kod&gt;</description>
<pubDate>Thu, 30 Apr 2009 14:39:25 GMT</pubDate>
<link>http://www.kodcu.net/yazi/dosyadan-tamponlu-okuma-yapma</link>
</item></channel>
</rss>
