Sunday 26 January 2020

What is Synchronization in Java

What is Synchronization in Java

Synchronization in java is the capability to control the access of multiple threads to any shared resource.


Example :


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package JavaPractice;

import java.util.Date;

public class TestSynchronization {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Table obj = new Table();
  MyThread1 th1 = new MyThread1(obj, true); // true for Synchronization
  MyThread2 th2 = new MyThread2(obj, true);
  th1.start();
  th2.start();
 }

}

class Table {
 // method not Synchronization
 void printTable(int n) {
  for (int i = 1; i <= 5; i++) {
   System.out.println(n * i);
   try {
    Thread.sleep(400);
   } catch (Exception e) {
    System.out.println(e);
   }
  }

 }

 // method is Synchronization
 synchronized void printTableSynchronization(int n) {
  for (int i = 1; i <= 5; i++) {
   System.out.println(n * i);
   try {
    Thread.sleep(400);
   } catch (Exception e) {
    System.out.println(e);
   }
  }

 }
}

class MyThread1 extends Thread {
 Table t;
 boolean isCallSynchronization;

 MyThread1(Table t, boolean isCallSynchronization) {
  this.t = t;
  this.isCallSynchronization = isCallSynchronization;
 }

 public void run() {
  if (this.isCallSynchronization) {
   System.out.println(new Date());
   t.printTableSynchronization(5);
   System.out.println(new Date());
  } else {
   System.out.println(new Date());
   t.printTable(5);
   System.out.println(new Date());
  }
 }
}

class MyThread2 extends Thread {
 Table t;
 boolean isCallSynchronization;

 MyThread2(Table t, boolean isCallSynchronization) {
  this.t = t;
  this.isCallSynchronization = isCallSynchronization;
 }

 public void run() {
  if (this.isCallSynchronization) {
   System.out.println(new Date());
   t.printTableSynchronization(100);
   System.out.println(new Date());
  } else {
   System.out.println(new Date());
   t.printTable(100);
   System.out.println(new Date());
  }
 }
}

How to find Second Highest element in Array in Java

How to find Second Highest element in Array in Java
  • Three ways to find Second largest element in Array.
    1. using single for loop
    2. using Arrays.
    3. using Collections.
  • Example :
  •  1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    package JavaPractice;
    
    import java.util.*;
    import java.util.stream.Collectors;
    
    public class SecondLargestNumber {
     /**
      * Using Single For loop
      */
     public static void secondLargestNumberUsingSingleForLoop(int arr[],
       int arr_size) {
      int first, second;
      if (arr_size < 2) {
       System.out.print(" Invalid Input ");
       return;
      }
      first = second = Integer.MIN_VALUE;
      for (int i = 0; i < arr_size; i++) {
       if (arr[i] > first) {
        second = first;
        first = arr[i];
       } else if (arr[i] > second && arr[i] != first) {
        second = arr[i];
       }
      }
    
      if (second == Integer.MIN_VALUE)
       System.out.print("There is no second largest" + " element\n");
      else
       System.out.print("The second largest element" + " is " + second + "\n");
     }
    
     /**
      * Using Arrays
      */
     public static void secondLargestNumberUsingArrays(int arr[], int arr_size) {
      Arrays.sort(arr);
      System.out.print("The second largest element" + " is "
        + arr[arr_size - 2] + "\n");
     }
    
     /**
      * Using Collections and Stream
      */
     public static void secondLargestNumberUsingCollections(int arr[],
       int arr_size) {
      List<Integer> list = Arrays.stream(arr).boxed()
        .collect(Collectors.toList());
      Collections.sort(list);
      System.out.print("The second largest element" + " is "
        + list.get(arr_size - 2)+ "\n");
     }
     /**
      * Main Function
      */
     public static void main(String[] args) {
      int arr[] = { 12, 35, 1, 10, 34, 1 };
      int n = arr.length;
      secondLargestNumberUsingSingleForLoop(arr, n);
      secondLargestNumberUsingArrays(arr, n);
      secondLargestNumberUsingCollections(arr, n);
    
     }
    
    }