Java Eğitimleri

Java ANA SAYFA Java'ya Giriş Java Başlarken Java Sözdizimi Java Yorumları Java Değişkenleri Java Veri Türleri Java Tipi Döküm Java Operatörleri Java Dizeleri Java Matematiği Java Booleanları Java Eğer... Başka Java Anahtarı Java while Döngüsü Döngü için Java Java Ara/Devam Java Dizileri

Java Yöntemleri

Java Yöntemleri Java Yöntemi Parametreleri Java Yöntemi Aşırı Yüklemesi Java Kapsamı Java Özyineleme

Java Sınıfları

Java OOP'si Java Sınıfları/Nesneleri Java Sınıfı Nitelikleri Java Sınıfı Yöntemleri Java Oluşturucuları Java Değiştiriciler Java Kapsülleme Java Paketleri / API Java Kalıtımı Java Polimorfizmi Java İç Sınıfları Java Soyutlama Java Arayüzü Java Numaraları Java Kullanıcı Girişi Java Tarihi Java Dizi Listesi Java Bağlantılı Listesi Java Hash Haritası Java HashSeti Java Yineleyici Java Sarıcı Sınıfları Java İstisnaları Java Normal İfadesi Java Konuları Java Lambda

Java Dosya İşleme

Java Dosyaları Java Dosyaları Oluşturma/Yazma Java Okuma Dosyaları Java Dosyaları Sil

Java Nasıl Yapılır

İki Sayı Ekle

Java Referansı

Java Anahtar Kelimeleri Java Dize Yöntemleri Java Matematik Yöntemleri

Java Örnekleri

Java Örnekleri Java Derleyici Java Alıştırmaları Java Testi Java Sertifikası


Java Konuları


Java Konuları

Threads, bir programın aynı anda birden çok şey yaparak daha verimli çalışmasına izin verir.

Konular, ana programı kesintiye uğratmadan arka planda karmaşık görevleri gerçekleştirmek için kullanılabilir.


Konu Oluşturma

Bir iş parçacığı oluşturmanın iki yolu vardır.

Sınıfı genişleterek ve yöntemini Threadgeçersiz kılarak oluşturulabilir:run()

Sözdizimini Genişlet

public class Main extends Thread {
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

Bir iş parçacığı oluşturmanın başka bir yolu, Runnablearabirimi uygulamaktır:

Sözdizimini uygula

public class Main implements Runnable {
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

Çalışan Konular

Sınıf, sınıfı genişletiyorsa, Threadiş parçacığı, sınıfın bir örneği oluşturularak ve start()yöntemini çağırarak çalıştırılabilir:

Genişlet Örneği

public class Main extends Thread {
  public static void main(String[] args) {
    Main thread = new Main();
    thread.start();
    System.out.println("This code is outside of the thread");
  }
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

Sınıf Runnablearabirimi uygularsa, iş parçacığı, sınıfın bir örneğini bir nesnenin yapıcısına ileterek Threadve ardından iş parçacığının start()yöntemini çağırarak çalıştırılabilir:

Uygulama Örneği

public class Main implements Runnable {
  public static void main(String[] args) {
    Main obj = new Main();
    Thread thread = new Thread(obj);
    thread.start();
    System.out.println("This code is outside of the thread");
  }
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

Konuları "genişletme" ve "uygulama" arasındaki farklar

En büyük fark, bir sınıf Thread sınıfını genişlettiğinde başka bir sınıfı genişletemezsiniz, ancak Runnable arabirimini uygulayarak başka bir sınıftan da genişletmek mümkündür, örneğin: class MyClass extends OtherClass implements Runnable.


Eşzamanlılık Sorunları

İş parçacıkları programın diğer bölümleriyle aynı anda çalıştığından, kodun hangi sırayla çalışacağını bilmenin bir yolu yoktur. Threadler ve ana program aynı değişkenleri okuyup yazarken, değerler tahmin edilemez. Bundan kaynaklanan sorunlara eşzamanlılık sorunları denir.

Örnek

Değişken tutarının değerinin tahmin edilemez olduğu bir kod örneği:

public class Main extends Thread {
  public static int amount = 0;

  public static void main(String[] args) {
    Main thread = new Main();
    thread.start();
    System.out.println(amount);
    amount++;
    System.out.println(amount);
  }

  public void run() {
    amount++;
  }
}

Eşzamanlılık sorunlarından kaçınmak için, iş parçacıkları arasında mümkün olduğunca az öznitelik paylaşmak en iyisidir. Niteliklerin paylaşılması gerekiyorsa, olası bir çözüm, isAlive() iş parçacığının değiştirebileceği nitelikleri kullanmadan önce iş parçacığının çalışmayı bitirip bitirmediğini kontrol etmek için iş parçacığı yöntemini kullanmaktır.

Örnek

isAlive()Eşzamanlılık sorunlarını önlemek için kullanın :

public class Main extends Thread {
  public static int amount = 0;

  public static void main(String[] args) {
    Main thread = new Main();
    thread.start();
    // Wait for the thread to finish
    while(thread.isAlive()) {
    System.out.println("Waiting...");
  }
  // Update amount and print its value
  System.out.println("Main: " + amount);
  amount++;
  System.out.println("Main: " + amount);
  }
  public void run() {
    amount++;
  }
}