Sobes.tech
Junior

Java dilinde hangi araçlar kullanılarak akışlar oluşturulabilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da bir iş parçacığı birkaç farklı şekilde oluşturulabilir:

  1. Thread sınıfından kalıtım: Yeni bir sınıf oluşturulur ve java.lang.Thread sınıfından kalıtılır, run() metodu geçersiz kılınır.

    // Thread'ten kalıtım alan bir sınıf oluşturuyoruz
    class MyThread extends Thread {
        // run() metodunu geçersiz kılıyoruz
        @Override
        public void run() {
            // Yeni iş parçacığında çalışacak kod
            System.out.println("İş parçacığı " + Thread.currentThread().getName() + " başlatıldı.");
        }
    }
    

    İş parçacığını başlatmak:

    // İş parçacığı örneği oluşturuyoruz
    MyThread thread = new MyThread();
    // İş parçacığını başlatıyoruz
    thread.start();
    
  2. Runnable arayüzünün uygulanması: Bir sınıf oluşturulur ve java.lang.Runnable arayüzü uygulanır, run() metodu sağlanır. Daha sonra, Runnable nesnesi ile bir Thread nesnesi oluşturulur.

    // Runnable arayüzünü uygulayan bir sınıf oluşturuyoruz
    class MyRunnable implements Runnable {
        // run() metodunu uygularız
        @Override
        public void run() {
            // Yeni iş parçacığında çalışacak kod
            System.out.println("İş parçacığı " + Thread.currentThread().getName() + " başlatıldı.");
        }
    }
    

    İş parçacığını başlatmak:

    // Runnable örneği oluşturuyoruz
    MyRunnable runnable = new MyRunnable();
    // Runnable ile bir Thread nesnesi oluşturuyoruz
    Thread thread = new Thread(runnable);
    // İş parçacığını başlatıyoruz
    thread.start();
    

    Bu yöntem tercih edilir çünkü sınıfın başka sınıflardan da kalıtımına izin verir.

  3. Callable arayüzü ve ExecutorService kullanımı: java.util.concurrent.Callable arayüzü, Runnable'a benzer şekilde, başka bir iş parçacığında çalıştırılabilen bir görevi temsil eder, ancak call() metodu sonuç döndürebilir ve istisnalar atabilir. Callable'ı çalıştırmak için genellikle java.util.concurrent.ExecutorService'den thread havuzları kullanılır.

    import java.util.concurrent.*;
    
    // Callable arayüzünü uygulayan bir sınıf oluşturuyoruz
    class MyCallable implements Callable<String> {
        // Sonuç döndürebilen call() metodunu uygularız
        @Override
        public String call() throws Exception {
            // Yeni iş parçacığında çalışacak kod
            System.out.println("İş parçacığı " + Thread.currentThread().getName() + " başlatıldı.");
            // Sonucu döndür
            return "Görev başarıyla tamamlandı!";
        }
    }
    

    Çalıştırma ve sonucu alma:

    import java.util.concurrent.*;
    
    // Thread havuzu oluşturuyoruz
    ExecutorService executor = Executors.newFixedThreadPool(1);
    // Callable örneği oluşturuyoruz
    MyCallable callable = new MyCallable();
    // Görevi çalıştırmak ve sonucu takip etmek için Future alıyoruz
    Future<String> future = executor.submit(callable);
    
    try {
        // Görevin sonucunu alıyoruz
        String result = future.get();
        System.out.println("Sonuç: " + result);
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    } finally {
        // ExecutorService'i kapatıyoruz
        executor.shutdown();
    }