Merhaba arkadaşlar bu yazımda Thread nedir ve kullanımını inceleyeceğiz.Thread program içerisindeki aynı akışta farklı işlemleri çalıştırabilmemizi sağlar.Bir programda aynı anda birden fazla thread çalıştırılabilir ve birbirleriyle haberleşebilirler.Yeni bir thread oluşturma işleminde run metodu çağırıldığında stackte bir yer oluşur.Her oluşan thread stackte farklı bir yerde bulunur.Thread işçi , runnable ise iş olarak düşünülebilir.Thread’ın metodlarına bir göz atalım ve kısa bir örnekle açıklamaya çalışalım.

İki farklı şekilde thread oluşturabilir.Ufak bir örnekte gösterelim.
[code lang=”java”]
public class MyThread implements Runnable{
public MyThread(){ }
@Override
public void run() {
for(int i=0;i<5;i++)
{
System.out.println("Thread1 " +deger);
}
}
[/code]
Yukarıdaki gibi Thread sınıfı oluşturup Runnable implements işlemi yaparak threadımızı oluşturabiliriz.Veya farklı olarak aşağıdaki gibi oluşturabiliriz.
[code lang=”java”]
public class Test {
public static void main(String[] args) {
Thread th1=new Thread(new MyThread());
Thread th2=new Thread(new Runnable() {
@Override
public void run() {
for (int i=0;i<5;i++)
{
System.out.println("Thread2 "+i);
}
}
});
th1.start();
th2.start();
}
[/code]
Yukarıdaki gibi kendi oluşturduğumuz Runnable’ı Thread içerisinde verebiliriz ve farklı olarak sınıf oluşturmadan direk new Runnable ile oluşturup işlemlerimizi yapabiliriz.

Çıktıdanda görüldüğü üzere iki thread aynı anda çalışabiliyor.Yani java multi-thread yapısını destekliyor.
Thread yapımızda ufak bir değişiklik yapalım.MyThread yapımızı aşağıdaki gibi düzenleyelim.
[code lang=”java”]
public class MyThread implements Runnable{
private int deger;
private String isim;
public MyThread(String isim,int i)
{
this.isim=isim;
deger=i;
}
@Override
public void run() {
for(int i=0;i<deger;i++)
{
System.out.println(isim+" " +i);
}
}
}
[/code]
Aynı şekilde Test sınıfımızıda düzenleyelim.
[code lang=”java”]
public class Test {
public static void main(String[] args) {
Thread th1=new Thread(new MyThread("thread1",5));
Thread th2=new Thread(new MyThread("thread2",3));
try {
th1.start();
th1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
th2.start();
}
}
[/code]
Programımızı çalıştırdığımızda aşağıdaki çıktıyı elde edeceğiz.Burada diğerinden farklı olarak join() metodunu kullandık.Thread1 işlemini bitirmeden oraya başka bir thread girmesini engelliyor.İşini bitirdirdikten sonra diğer thread işleme başlayabiliyor. Buda bizim Thread’larımızın çalışmasını kontrol etmemizi sağlıyor.