Java ile Paralel Programlama
Java’da paralel programlama, multithreading mekanizmasını kullanarak aynı anda birden fazla iş parçacığını (thread) çalıştırmak anlamına gelir. Bu, Java programlarının performansını artırır ve işlem gücünden en iyi şekilde yararlanmayı sağlar.
Java’da paralel programlama için java.lang.Thread sınıfı ve java.lang.Runnable arayüzü kullanılır. Ayrıca, java.util.concurrent paketi, paralel programlama için hazır sınıflar ve araçlar sağlar.
// Örnek: Java'da paralel programlama kullanarak hesaplamaları yapma
import java.util.concurrent.*;
public class ParallelCalculation {
public static void main(String[] args) {
int n = 1000000;
double[] numbers = new double[n];
double sum = 0;
for (int i = 0; i < n; i++) {
numbers[i] = Math.random();
}
// Paralel hesaplama için ForkJoinPool kullanma
ForkJoinPool forkJoinPool = new ForkJoinPool();
sum = forkJoinPool.invoke(new RecursiveSum(numbers, 0, numbers.length));
System.out.println("Toplam: " + sum);
}
}
class RecursiveSum extends RecursiveTask {
private double[] numbers;
private int start;
private int end;
public RecursiveSum(double[] numbers, int start, int end) {
this.numbers = numbers;
this.start = start;
this.end = end;
}
@Override
protected Double compute() {
if (end - start <= 10000) {
double sum = 0;
for (int i = start; i < end; i++) {
sum += numbers[i];
}
return sum;
} else {
int middle = (start + end) / 2;
RecursiveSum leftSum = new RecursiveSum(numbers, start, middle);
RecursiveSum rightSum = new RecursiveSum(numbers, middle, end);
leftSum.fork();
double rightResult = rightSum.compute();
double leftResult = leftSum.join();
return leftResult + rightResult;
}
}
}
Java ile Dağıtık Programlama
Java RMI (Remote Method Invocation), dağıtık programlama için Java’nın sağladığı bir mekanizmadır. RMI, farklı Java sanal makineleri arasında nesne tabanlı iletişimi mümkün kılar.
Dağıtık programlama, aynı anda birden fazla bilgisayar veya cihaz arasında çalışan uygulamaların koordinasyonunu ve veri paylaşımını içerir.
// Örnek: Java RMI kullanarak basit bir dağıtık uygulama
import java.rmi.*;
public interface Calculator extends Remote {
double add(double a, double b) throws RemoteException;
}
public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
public CalculatorImpl() throws RemoteException {
super();
}
@Override
public double add(double a, double b) throws RemoteException {
return a + b;
}
}
import java.rmi.*;
public class Server {
public static void main(String[] args) {
try {
Calculator calculator = new CalculatorImpl();
Naming.rebind("CalculatorService", calculator);
System.out.println("Sunucu çalışıyor...");
} catch (Exception e) {
System.err.println("Sunucu hatası: " + e.getMessage());
}
}
}
public class Client {
public static void main(String[] args) {
try {
Calculator calculator = (Calculator) Naming.lookup("rmi://localhost/CalculatorService");
double result = calculator.add(10, 20);
System.out.println("Sonuç: " + result);
} catch (Exception e) {
System.err.println("İstemci hatası: " + e.getMessage());
}
}
}
Sonuç
Java’nın paralel ve dağıtık programlama yetenekleri, yazılım geliştiricilere güçlü ve etkili çözümler sunar. Paralel programlama, işlem gücünden en iyi şekilde yararlanmak için çoklu iş parçacıklarının kullanılmasını sağlarken, dağıtık programlama ise farklı cihazlar arasında iletişimi ve koordinasyonu mümkün kılar. Java’nın bu ilgi çekici özelliklerini anlamak, yazılım geliştirme süreçlerinde daha etkili ve verimli uygulamalar oluşturmak için önemli bir adımdır.

