Callable, Future, Return from Threads

Kategori: Java , 23 Temmuz 2019 , JanFranco


Çalıştırdığımız threadlerde, bir değeri return etmek için Callable ve Future sınıflarını kullanabiliriz. Direk örnek üzerinden görelim. Thread oluşturalım, rastgele bir değer üretelim. Thread ürettiğimiz rastgele değer + 2 saniye kadar beklesin. Beklediği süreyi return etsin:


import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Main_class {
	
	public static void main(String[] args){
		
		ExecutorService executor = Executors.newFixedThreadPool(1);
		
		Future<?> future = executor.submit(new Callable<Integer>() {

			@Override
			public Integer call() throws Exception {
				Random random = new Random();
				int time = random.nextInt(1000) + 2000;
				
				System.out.println("Thread is running...");
				try {
					Thread.sleep(time);
				} catch (InterruptedException e) {
					System.out.println(e);
				}
				System.out.println("Finished...");
				
				return time;
			}
			
		});
		
		try {
			System.out.println("Time: " + future.get());
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			System.out.println(e);
		}
		
		executor.shutdown();
		
	}
	
}
Thread oluştururken Runnable sınıfını kullanıyorduk. Eğer return statementını kullanacaksak Callable sınıfını kullanmalıyız. Runnable sınıfı ile void tipinde bir fonksiyon override ediyorken, Callable sınıfı ile generic bir fonksiyon override ediyoruz. Return edeceğimiz değeri Future sınıfından bir obje ile tutuyoruz. future.get methodu ile de return değerini alıyoruz.


Sonraki Yazı: Interruptions
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın