Hi All,
In this post I am going to give an example of singleton class which is not thread safe and leads to create multiple objects by multiple threads..
Classes:
Singleton.java
Creator.java
Creator1.java
Test.java
Singleton.java
---------------------
public class Singleton {
private static Singleton s;
public static int count = 0;
private Singleton() {
count++;
}
public static Singleton getInstance() {
if (null == s) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
s = new Singleton();
   
}
return s;
}
public void display(){
  
System.out.println("hi");
}
}//end class
  
  
In this post I am going to give an example of singleton class which is not thread safe and leads to create multiple objects by multiple threads..
Classes:
Singleton.java
Creator.java
Creator1.java
Test.java
Singleton.java
---------------------
public class Singleton {
private static Singleton s;
public static int count = 0;
private Singleton() {
count++;
}
public static Singleton getInstance() {
if (null == s) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
s = new Singleton();
}
return s;
}
public void display(){
System.out.println("hi");
}
}//end class
---------------------------------------------------------------------------------------------------------
Creator.java
---------------
public class Creator extends Thread {
 @Override
 public void run() {
  Singleton s = Singleton.getInstance();
  s.display();
 }
}//end class
---------------------------------------------------------------------------------------------------------
Creator1.java
-----------------
public class Creator1 extends Thread {
 @Override
 public void run() {
  Singleton s = Singleton.getInstance();
  s.display();
 }
}//end class
---------------------------------------------------------------------------------------------------------
Test.java
------------
public class Test {
 public static void main(String[] args) throws InterruptedException {
  Creator c = new Creator();
  Creator1 c1=new Creator1();
  c1.start();
  c.start();
  Thread.sleep(600);
  System.out.println(" number of threads created is:" + Singleton.count);
 }
}//end class
If you run the above Test class, the output will be like below
trail 1: 
hi
hi
 number of threads created is:1
trail 2:
hi
hi
 number of threads created is:2
trail 3:
hi
hi
 number of threads created is:2
....and so on..
Here even though we have made singleton class, In multi threaded environment, there is a chance of creating two objects / calling constructors two times  by multiple threads.
No comments:
Post a Comment