Öncelikle java Thread sınıfı ve Runnable interfacesini bize hizmet etsinler diye verir. Thread sınıfının Runnable arayüzünün implemente edilmiş sınıfların objesini kabul eden bir yapıcı metodu vardır. Java da bir kalıtım yapacak olursak ancak bir sınıftan extend edebiliriz(Single Inheritance).
SINGLE INHERITANCE:
Bu da java da single inheritance olarak geçmektedir. Peki biz bir sınıf yaratalım ve ata sınıfı A olsun. Ama aynı zamanda sınıfımızda Thread işlemleri de yapabilmek için Thread sınıfından türetelim. Bunu aşağıdaki gibi yapmak gerekiyor.
class A {
// falanda filan
}
class B extends A, Thread{ // Hata verecektir. Single Inheritance a göre.
// falanda filan
}
Ama burada hata oluşur çünkü Hem A sınıfından hem Thread sınıfından sınıfımızı extend edemeyiz.
Single Inheritance yüzünden bizde Runnable arayüzünü kullanırız. Böylece Thread işlemlerine kendi sınıfımızı sokabiliriz.
class B extends A implements Runnable{
// Falanda filan
}
Yazdığınız herhangi bir java programının başlangıç yordamı public sınıfın main metodudur. Bu metod işlerken standart program için bir Thread oluşur ve program sonlandığında Thread’ da sonlanır. Ancak bununla birlikte bir sınıf içindeki diğer yordamlarında hem programın bir parçasıymışçasına hem de programdan bağımsız işlemci gücü kullanarak çalışması Thread sayesinde yapılabilir. Bu iş parçacıkları ana iş parçacığı içinden yönetilebilir. Ref:JAVA İçinde Thread Kullanımı
Thread Önceliklerini Belirlemek
Bunun sonucunda çıktımız aşağıdaki gibi olacaktır. Artık first thread ilk çalışıyor dikkat ederseniz.
Arkaplan ve Önplan threadleri (Foreground, Background Threads)
thObj.setDaemon(true); // Background Thread olsun
ile threadimiz background thread olarak çalışır. Uygulama bitirilmek istendiği zaman background threadler kapanmayı geciktirmez.Ama foreground threadler bitirilmeden uygulama kapatılamaz.
Kodumuz aşağıdaki gibi olacak:
Sonuç foreground thread olduğu için ikinci thread bitinceye kadar bekleyecek şekilde yani aşağıdaki gibi olacaktır.
10 sn bekleme bittikten sonra;
Threadi Durdurmak
Bir threadi durdurmak için önceden stop() fonksiyonu kullanılırken şimdilerde abilerin tavsiyesi ile bir şart değişkeni kullanılarak işleyiş durdurulmalıdır.
public class Thredim extends Thread{
public void run(){
while(!timeToStop){
// birşeyler yap
}
}
void StopToRunning(){
timeStop= true;
}
}