JAVA SP T


Lets dive into snapshot of my programs!💻

3.Write a Java program that sorts an array of integers using multiple threads.

💡Code:

import java.util.Arrays;

              class program3 {
              private static final int ARRAY_SIZE = 400;
              private static final int NUM_THREADS = 4;
              
              public static void main(String[] args) {
              int[] array = createArray();
              System.out.println("Before sorting: " + Arrays.toString(array));
              
              Thread[] threads = new Thread[NUM_THREADS];
              int segmentSize = ARRAY_SIZE / NUM_THREADS;
              
              for (int i = 0; i < NUM_THREADS; i++) {
              int startIndex = i * segmentSize; int endIndex = (i == NUM_THREADS - 1) ? ARRAY_SIZE - 1 : (startIndex + segmentSize - 1);
              threads[i] = new Thread(new SortTask(array, startIndex, endIndex));
              threads[i].start();
              }
              
              for (Thread thread: threads) {
              try {
              thread.join();
              } catch (InterruptedException e) {
              e.printStackTrace();
              }
              }
              
              mergeSort(array, 0, ARRAY_SIZE - 1);
              
              System.out.println("After sorting: " + Arrays.toString(array));
              }
              
              private static int[] createArray() {
              int[] array = new int[ARRAY_SIZE];
              for (int i = 0; i < ARRAY_SIZE; i++) {
              array[i] = (int)(Math.random() * 400); // Generate random numbers between 0 and 400
              }
              return array;
              }
              
              private static void mergeSort(int[] array, int left, int right) {
              if (left < right) {
              int mid = (left + right) / 2;
              mergeSort(array, left, mid);
              mergeSort(array, mid + 1, right);
              merge(array, left, mid, right);
              }
              }
              
              private static void merge(int[] array, int left, int mid, int right) {
              int[] temp = new int[right - left + 1];
              int i = left, j = mid + 1, k = 0;
              
              while (i <= mid && j <= right) {
              if (array[i] <= array[j]) {
              temp[k++] = array[i++];
              } else {
              temp[k++] = array[j++];
              }
              }
              
              while (i <= mid) {
              temp[k++] = array[i++];
              }
              
              while (j <= right) {
              temp[k++] = array[j++];
              }
              
              System.arraycopy(temp, 0, array, left, temp.length);
              }
              
              static class SortTask implements Runnable {
              private int[] array;
              private int startIndex;
              private int endIndex;
              
              public SortTask(int[] array, int startIndex, int endIndex) {
              this.array = array;
              this.startIndex = startIndex;
              this.endIndex = endIndex;
              }
              
              @Override
              public void run() {
              Arrays.sort(array, startIndex, endIndex + 1);
              }
              }
              } 

📸Output :

output